2015-02-18 16 views
21

Attualmente sto provando a seminare la tabella dei miei utenti. Se provo in questo modo con 2 righe, fallisce. Funziona bene se uso solo un singolo array invece dei 2 array all'interno dell'array $ users per creare dati falsi.Sementi multiple righe contemporaneamente laravel 5

Cosa sto sbagliando, qual è il modo corretto di farlo?

class UserTableSeeder extends Seeder { 

    public function run() 
    { 
     DB::table('users')->delete(); 

     $users = [ 
      ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => '[email protected]', 'password' => bcrypt('carrotz124')], 
      ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => '[email protected]', 'password' => bcrypt('carrotz1243')], 
     ]; 

     User::create($users); 
    } 

} 

risposta

37

Se è necessario utilizzare il modello è necessario un ciclo:

foreach($users as $user){ 
    User::create($user); 
} 

Altrimenti si può semplicemente utilizzare DB::table() e insert:

DB::table('users')->insert($users); 

In realtà si può anche chiamare insert() sul modello (la query risultante è la stessa)

User::insert($users); 

Nota se si sceglie il metodo insert perdi funzionalità Eloquente speciale come timestamp e gli eventi del modello.

+1

Era questo è cambiato di recente? Ho un vago ricordo di essere in grado di fare esattamente ciò che l'OP ha provato, qualche tempo fa. –

+0

@JoelHinz Non proprio. Per quanto ne so, non è mai stato possibile. È [è stato discusso] (https://github.com/laravel/framework/issues/1295) ma la richiesta è stata rifiutata. – lukasgeiter

+0

Grazie funziona bene, peccato che non potessi tornare indietro di qualcosa come questo nella documentazione ufficiale. –

13

questo funziona, anche per laravel 5,3

<?php 

use Illuminate\Database\Seeder; 

class UsersTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 

    public function run() 
    { 
     // check if table users is empty 
     if(DB::table('users')->get()->count() == 0){ 

      DB::table('users')->insert([ 

       [ 
        'name' => 'Administrator', 
        'email' => '[email protected]', 
        'password' => bcrypt('password'), 
        'created_at' => date('Y-m-d H:i:s'), 
        'updated_at' => date('Y-m-d H:i:s'), 
       ], 
       [ 
        'name' => 'Agency', 
        'email' => '[email protected]', 
        'password' => bcrypt('password'), 
        'created_at' => date('Y-m-d H:i:s'), 
        'updated_at' => date('Y-m-d H:i:s'), 
       ], 
       [ 
        'name' => 'End', 
        'email' => '[email protected]', 
        'password' => bcrypt('password'), 
        'created_at' => date('Y-m-d H:i:s'), 
        'updated_at' => date('Y-m-d H:i:s'), 
       ] 

      ]); 

     } else { echo "\e[31mTable is not empty, therefore NOT "; } 

    } 
}