LaravelLaravel框架相关

资料3 - PHP Artisan Seeder 填充器

2017-01-22  本文已影响89人  7c03aed0f01f

执行 Seeders

一旦你编写完成 seeder 类,
你就可以使用 db:seed Artisan 命令来将数据填充到数据库中。
默认的,db:seed 命令会直接执行 DatabaseSeeder 类

创建seed文件

php artisan make:seeder UsersTableSeeder     // 生成 Seeder 文件

Seeder 语法

Model Factories 模型工厂 语法案例

  1. 生成用户数据
$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,
]);
  1. 根据现有 数据
$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();

执行方式:

  1. 基本方式
php artisan db:seed // 填充所有
php artisan db:seed --class=UsersTableSeeder // --class 选择指定需要填充的类
  1. 使用 tinker (省略seed文件,直接操作 ModelFactory)
php artisan tinker
namespace App;
factory(User::class,20)->create()
  1. 你也可以在使用 migrate:refresh 命令时运行 seed
    将回滚所有的迁移,然后再执行迁移,之后进行填充数据。这条命令对于应用的数据库重置非常有用:(必杀技)
php artisan migrate:refresh --seed

遇到的问题

  1. 在表对应的model文件 设置填充数据时 不需要填充 updated_at 等生成时间的字段
// [Illuminate\Database\QueryException]
// SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'
public $timestamps=false;
上一篇下一篇

猜你喜欢

热点阅读