Семя несколько рядов одновременно 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);
}

}

29

Решение

Если вам нужно использовать модель, вам нужен цикл:

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

В противном случае вы можете просто использовать DB::table() а также insert:

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

На самом деле вы также можете позвонить insert() на модели (результирующий запрос такой же)

User::insert($users);

Заметка если вы выберете insert метод, который вы теряете специальные функции Eloquent, такие как метки времени и события модели.

42

Другие решения

Это работает даже для 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 "; }

}
}
27

public function run()
{
//
for ($i=0; $i < 1000; $i++) {
DB::table('seo_contents')->insert([
'title' => str_random(10),
'content' => str_random(100),
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s'),

]);
}

}
0

Вы должны использовать вставку вместо создания.
Так что код будет выглядеть так:

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::insert($users);
}

}
0
По вопросам рекламы [email protected]