一次播种多行 laravel 5
Seed multiple rows at once laravel 5
我目前正在尝试为我的用户提供种子table。如果我用 2 行这样尝试,它会失败。如果我只使用单个数组而不是 $users 数组中的 2 个数组来创建一些假数据,它就可以正常工作。
我做错了什么,正确的做法是什么?
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::create($users);
}
}
如果你必须使用你需要一个循环的模型:
foreach($users as $user){
User::create($user);
}
否则你可以只使用DB::table()
和insert
:
DB::table('users')->insert($users);
其实你也可以在模型上调用insert()
(结果查询是一样的)
User::insert($users);
注意 如果您选择 insert
方法,您将失去特殊的 Eloquent 功能,例如时间戳和模型事件。
这适用于 Laravel ^5
<?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')->count() == 0){
DB::table('users')->insert([
[
'name' => 'Administrator',
'email' => 'admin@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'Agency',
'email' => 'agency@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'End',
'email' => 'endcustomer@app.com',
'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 "; }
}
}
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'),
]);
}
}
create()
用于只存储一条记录。要存储多条记录,您应该使用 insert()
而不是 create()
。
所以代码将如下所示:
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::insert($users);
}
}
P.S。 insert()
函数不会存储时间戳。即created_by
& updated_by
字段。
如果有人为此苦苦挣扎,我自 Laravel 5 以来一直在使用以下内容,并且可以确认仍在 [=18= 中工作]+...
class UserTableSeeder extends Seeder {
public function run()
{
\DB::table('users')->delete();
\DB::table('users')->insert(array (
0 =>
array (
'id' => 1,
'name' => 'Stephan de Vries',
'username' => 'stephan',
'email' => 'stephan-v@gmail.com',
'password' => bcrypt('carrotz124'
),
1 =>
array (
'id' => 2,
'name' => 'John doe',
'username' => 'johnny',
'email' => 'johndoe@gmail.com',
'password' => bcrypt('carrotz1243'
),
));
}}
使用截断
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::truncate();
$users = [
[
'name' => 'Super Admin',
'email' => 'superadmin@gmail.com',
'password' => '123456',
],
[
'name' => 'Account Admin',
'email' => 'accountadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Project Admin',
'email' => 'projectadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Client Admin',
'email' => 'clientadmin@gmail.com',
'password' => '13456',
]
];
User::create($users);
}
}
我目前正在尝试为我的用户提供种子table。如果我用 2 行这样尝试,它会失败。如果我只使用单个数组而不是 $users 数组中的 2 个数组来创建一些假数据,它就可以正常工作。
我做错了什么,正确的做法是什么?
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::create($users);
}
}
如果你必须使用你需要一个循环的模型:
foreach($users as $user){
User::create($user);
}
否则你可以只使用DB::table()
和insert
:
DB::table('users')->insert($users);
其实你也可以在模型上调用insert()
(结果查询是一样的)
User::insert($users);
注意 如果您选择 insert
方法,您将失去特殊的 Eloquent 功能,例如时间戳和模型事件。
这适用于 Laravel ^5
<?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')->count() == 0){
DB::table('users')->insert([
[
'name' => 'Administrator',
'email' => 'admin@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'Agency',
'email' => 'agency@app.com',
'password' => bcrypt('password'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'name' => 'End',
'email' => 'endcustomer@app.com',
'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 "; }
}
}
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'),
]);
}
}
create()
用于只存储一条记录。要存储多条记录,您应该使用 insert()
而不是 create()
。
所以代码将如下所示:
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::insert($users);
}
}
P.S。 insert()
函数不会存储时间戳。即created_by
& updated_by
字段。
如果有人为此苦苦挣扎,我自 Laravel 5 以来一直在使用以下内容,并且可以确认仍在 [=18= 中工作]+...
class UserTableSeeder extends Seeder {
public function run()
{
\DB::table('users')->delete();
\DB::table('users')->insert(array (
0 =>
array (
'id' => 1,
'name' => 'Stephan de Vries',
'username' => 'stephan',
'email' => 'stephan-v@gmail.com',
'password' => bcrypt('carrotz124'
),
1 =>
array (
'id' => 2,
'name' => 'John doe',
'username' => 'johnny',
'email' => 'johndoe@gmail.com',
'password' => bcrypt('carrotz1243'
),
));
}}
使用截断
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::truncate();
$users = [
[
'name' => 'Super Admin',
'email' => 'superadmin@gmail.com',
'password' => '123456',
],
[
'name' => 'Account Admin',
'email' => 'accountadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Project Admin',
'email' => 'projectadmin@gmail.com',
'password' => '13456',
],
[
'name' => 'Client Admin',
'email' => 'clientadmin@gmail.com',
'password' => '13456',
]
];
User::create($users);
}
}