先前已经给专栏数据表填充了 10 专栏数据,现在给文章数据表填充点数据,为后续开发做准备。
文章模型
运行以下命令同时生成模型和迁移文件:
php artisan make:model Article -fm
-fm
参数代表同时生成 factory 工厂文件和 migration 数据库迁移文件
打开生成的{timestamp}_create_articles_table.php
文件,修改内容如下:database/migrations/{timestamp}_create_articles_table.php
。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('column_id');
$table->string('title');
$table->string('excerpt');
$table->text('content');
$table->string('slug');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('articles');
}
};
字段说明:
字段名称 | 描述 | 类型 | 加索引缘由 |
---|---|---|---|
id | 自增 ID | unsigned big int | 主键 |
column_id | 该文章所属的专栏 | unsigned big int | 外键 |
title | 文章标题 | string | 文章 |
excerpt | 文章摘要,SEO 优化时用 | string | 无 |
content | 文章内容 | text | 无 |
文章的数据工厂
打开 ArticleFactory.php
文件,修改内容如下:database/factories/ArticleFactory.php
。
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Article>
*/
class ArticleFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$sentence = $this->faker->sentence();
return [
'title' => $sentence,
'content' => $this->faker->text(),
'excerpt' => $sentence,
'column_id' => $this->faker->randomElement([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
];
}
}
sentence()
随机生成『小段落』文本用以填充 title
标题字段和 excerpt
摘录字段。text()
方法会生成大段的随机文本,此处我们来填充话题的 content
内容字段。
文章数据填充
使用以下命令生成数据填充文件:
php artisan make:seed ArticlesSeeder
修改文件如以下:database/seeders/ArticlesSeeder.php
。
<?php
namespace Database\Seeders;
use App\Models\Article;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ArticlesSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Article::factory()->count(50)->create();
}
}
注册数据填充
现在需要修改 DatabaseSeeder.php
文件,在里面添加 ArticlesSeeder
调用:
database/seeders/DatabaseSeeder.php。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(ColumnsSeeder::class);
$this->call(ArticlesSeeder::class);
}
}
调用是按 run()
方法里的顺序由上到下依次调用,先生成专栏数据,再生出文章数据。
执行填充数据命令
一切准备就绪,接下来开始调用数据填充命令,将假数据写入数据库。只需要 10 条测试专栏数据,而之前已经生成了 10 条专栏数据了,所以使用:
php artisan migrate:refresh --seed
执行成功后查看数据库就可以看到,columns
专栏表里面有 10 条数据,Articles
文章表里面有 50 条数据: