执行 Seeders
一旦你编写完成 seeder 类,
你就可以使用 db:seed Artisan 命令来将数据填充到数据库中。
默认的,db:seed 命令会直接执行 DatabaseSeeder 类
创建seed文件
php artisan make:seeder UsersTableSeeder // 生成 Seeder 文件
Seeder 语法
Model Factories 模型工厂 语法案例
- 生成用户数据
$faker = Faker\Factory::create('zh_CN'); // 填充中文数据(姓名、地址、手机号等)
$factory->define(App\User::class, function() use ($faker) {
static $password;
return [
'mobile' => $faker->phoneNumber,
'pwd' => $password ?: $password = bcrypt('123'), // 三元运算 + 加密
'tpwd' => $password ?: $password = bcrypt('456'),
'userIcon' => '1.png',
'framName' => $faker->lastName . $faker->firstNameFemale .'的商城', // 姓+名
'eggCount' => $faker->randomFloat(2, 0.00, 99.99), // 随机数
'feedsCount' => $faker->randomFloat(2, 0.00, 99.99),
'remember_token' => str_random(10),
];
});
调用
factory('App\User',10)->create([ // 生成10条
'pwd' => bcrypt('1111'),
'tpwd' => bcrypt('2222'),
'recommen' => 18512345678,
]);
- 根据现有 数据
$faker = Faker\Factory::create('zh_CN');
$factory->define(App\User::class, function() use ($faker) {
$userId= \App\User::pluck('id')->toArray(); // 获取User表用户id // pluck是laravel5.3的,5.3之前用的是lists
return [
'mobile' => $faker->phoneNumber,
'pwd' => bcrypt('123'),
'tpwd' => bcrypt('456'),
'recommen' => $faker->randomElement($userId), // id数组中随机取
'eggCount' => $faker->randomFloat(2, 0.00, 999.99),
'remember_token' => str_random(10),
];
});
调用
factory('App\User',10)->create();
执行方式:
- 基本方式
php artisan db:seed // 填充所有
php artisan db:seed --class=UsersTableSeeder // --class 选择指定需要填充的类
- 使用 tinker (省略seed文件,直接操作 ModelFactory)
php artisan tinker
namespace App;
factory(User::class,20)->create()
- 你也可以在使用 migrate:refresh 命令时运行 seed
将回滚所有的迁移,然后再执行迁移,之后进行填充数据。这条命令对于应用的数据库重置非常有用:(必杀技)
php artisan migrate:refresh --seed
遇到的问题
- 在表对应的model文件 设置填充数据时 不需要填充 updated_at 等生成时间的字段
// [Illuminate\Database\QueryException]
// SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'
public $timestamps=false;
网友评论