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
然后再执行即可
网友评论