美文网首页LaravelLaravel框架相关
资料3 - PHP Artisan Seeder 填充器

资料3 - PHP Artisan Seeder 填充器

作者: 7c03aed0f01f | 来源:发表于2017-01-22 15:43 被阅读89次

    执行 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;
    

    相关文章

      网友评论

      本文标题:资料3 - PHP Artisan Seeder 填充器

      本文链接:https://www.haomeiwen.com/subject/sikobttx.html