美文网首页
`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