Семя несколько рядов сразу laravel 5
В настоящее время я пытаюсь засеять таблицу моих пользователей. Если я попробую сделать это с двумя строками, это не сработает. Он отлично работает, если я просто использую только один массив вместо 2 массивов внутри массива $users, чтобы создать некоторые поддельные данные.
Что я делаю неправильно, каков правильный способ сделать это?
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);
}
}
Ответы
Ответ 1
Если вам нужно использовать модель, вам нужен цикл:
foreach($users as $user){
User::create($user);
}
В противном случае вы можете просто использовать DB::table()
и insert
:
DB::table('users')->insert($users);
На самом деле вы также можете вызвать insert()
в модели (результирующий запрос одинаков)
User::insert($users);
Примечание, если вы выберете метод insert
, вы потеряете специальные функции Eloquent, такие как временные метки и события модели.
Ответ 2
Это работает даже для 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 "; }
}
}