laravel - 使用工厂、seeder 、fake等模块进行数据填充
Laiyong Wang Lv6

注意点

本文档写的较为简单
只填充单表数据

工厂

创建工厂
1
2
3
php artisan make:factory FlightFactory
//或者
php artisan make:factory PostFactory --model=Post //指定 model
写工厂

注意引入需要使用的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\Flight;

class FlightFactory extends Factory
{
protected $model = Flight::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
// return 里的字段需要与表中一致,少点没事
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'age' => $this->faker->randomDigit,
];
}
}

seeder

创建 seeder 文件
1
php artisan make:seeder FlightTableSeeder
写 seeder 文件

注意引入需要使用的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Flight;

class FlightTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// 生成数据集合
Flight::factory()->count(10)->create();
//可定制数据
$flight = Flight::find(1);
$flight->name = 'Summer';
$flight->email = 'summer@example.com';
$flight->save();
}
}
增加配置

在 DatabaseSeeder 中调用 call 方法来指定我们要运行假数据填充的文件
database/seeders/DatabaseSeeder.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(FlightTableSeeder::class); //新增一行
}
}

开始填充数据

1
2
3
php artisan migrate:refresh //不推荐执行,清洗数据
php artisan db:seed //不推荐执行,所有填充文件都执行,看自己需求
php artisan db:seed --class=FlightTableSeeder //推荐执行,只执行对应的,精准填充数据,
$li-margin-bottom = 0.8rem $post-tool-button-width = 2.5rem .post-tools-container { padding-top var(--component-gap) .post-tools-list { li { margin-bottom $li-margin-bottom &:last-child { margin-bottom 0 } } li.tools-item { position relative box-sizing border-box width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.2rem background var(--background-color-1) border-radius 50% box-shadow 2px 2px 5px var(--shadow-color) cursor pointer &:hover { box-shadow 2px 2px 8px var(--shadow-hover-color) } i { color var(--text-color-3) } &:hover { color var(--background-color-1) background var(--primary-color) i { color var(--background-color-1) !important } } &.toggle-show-toc { display none } &.go-to-comments { .post-comments-count { position absolute top 0 right -1rem display none align-items center justify-content center box-sizing border-box min-width 1.1rem height 1.1rem padding 0 0.2rem color var(--badge-color) font-size 12px background var(--badge-background-color) border-radius 0.4rem +keep-tablet() { display none !important } } } } li.status-item { width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.6rem cursor pointer &.post-lock { cursor default .fa-lock-open { display none color var(--keep-success-color) } &.decrypt { cursor pointer .fa-lock-open { display block } .fa-lock { display none } } } } } }