美文网首页
`laravel`数据填充

`laravel`数据填充

作者: 云龙789 | 来源:发表于2018-07-29 15:01 被阅读11次

    laravel数据填充

    • 1 首先创建一个测试数据表
    php artisan make:migrat create_test_table
    数据内容填写
    Schema::create('test', function (Blueprint $table) {
               $table->increments('id');
               $table->string('name')->default('');
               $table->string('email')->default('test@qq.com');
               $table->text('address');
               $table->timestamps();
           });
           
    然后运行 php artisan migrate 添加数据表
    
    • 2 添加一个Model
    php artisan make:model Test
    里面其他的可以忽略,但是必须写表名
    protected $table='test';
    
    • 3 创建数据工厂factory
    `php artisan make:factory TestFactory`
    
    <?php
    use Faker\Generator as Faker;
    $factory->define(\App\Test::class, function (Faker $faker) {
       return [
           'name' => $faker->name(),
           'address'=>$faker->address,
           'email' => $faker->email,
       ];
    });
    可以直接代码追踪 查看$faker 支持的数据 
    
    
    • 4 编写seeder填充数据
    php artisan make:seeder TestTableSeeder
    
    <?php
    use Illuminate\Database\Seeder;
    class TestTableSeeder extends Seeder
    {
       /**
        * Run the database seeds.
        *
        * @return void
        */
       public function run()
       {
           $test = factory(\App\Test::class)->times(10)->make();
           \App\Test::insert($test->toArray());
       }
    }
    
    切记数据一定要toArray(); 因为生成的是对象,但是插入的是数组
    
    如果需要其他数据表里面的数据,可以这样操作
      public function run()
       {
           // 获取 Faker 实例
           $faker = app(\Faker\Generator::class);
           $user_names = \App\Models\User::all()->pluck('name')->toArray();
           $test = factory(\App\Test::class)->times(13)->make()->each(function ($test) use($faker,$user_names){
               $test->name = $faker->randomElement($user_names);
           });
           \App\Test::insert($test->toArray());
       }
    }
    如果生成数据时需要填充`created_at`,`updated_at` 的值,可以把`make()`,改成`create()`即可
    但是这个时候,必须要有这两个字段
    
    • 5 执行生成数据
     php artisan db:seed --class=TestTableSeeder
     
     以上方式是单独生成test的数据  如果想跟其他数据一起运行的话
     需要在
     laravel\Database\Seeder\DatabaseSeeder.php 文件里面的run()方法里面添加
      $this->call(TestTableSeeder::class);
    
    
    php artisan db:seed 是重新执行所有的填充
    php artisan migrate:refresh --seed 所有数据表重建并填充数据
    

    注意

    有时候可能db:seed 的时候,执行不到新添加的数据,可以在命令行运行composer dump-autoload 然后再执行即可

    相关文章

      网友评论

          本文标题:`laravel`数据填充

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