什么是 Seeding
Seeding(填充)是向数据库写入示例数据或初始数据的机制。 在搭建开发环境或运行自动化测试时,通常需要预先有一定的数据。由于每次手动输入数据非常繁琐,可以将其整理为可重复执行的 Seeder。 Seeder 类存放在database/seeders 目录下。默认会提供一个 DatabaseSeeder 类。
创建 Seeder
使用make:seeder Artisan 命令生成一个新的 Seeder 类。
database/seeders/UserSeeder.php。
编写 Seeder
在run() 方法中编写数据写入逻辑。你可以使用 DB 门面或 Eloquent 模型来插入数据。
使用 DB 门面
使用 Eloquent 模型
Seeding 执行期间,批量赋值保护会自动被禁用。你无需关心
$fillable 或 $guarded 的配置就可以插入数据。与模型工厂结合使用
如果需要大量测试数据,与模型工厂结合使用会非常方便。工厂能够批量生成带有随机字段的假数据。DatabaseSeeder 的用法
DatabaseSeeder 是统一管理多个 Seeder 的入口。使用 call() 方法指定要执行的 Seeder。
call() 的顺序执行。如果存在外键约束,请让被引用的表先填充(如:users → posts)。
运行 Seeder
运行所有 Seeder
DatabaseSeeder,然后按顺序执行通过 call() 指定的 Seeder。
只执行特定 Seeder
使用--class 选项可以指定要执行的 Seeder 类。
与迁移一起执行
在migrate:fresh 命令上添加 --seed 选项,可以先重建所有数据表,然后统一执行 Seeder。
--seeder 选项。
在生产环境中执行
在生产环境执行 Seeding 时会出现确认提示。如果不需要确认,可以使用--force 标记。
抑制模型事件
如果希望在 Seeding 期间阻止creating、created 等模型事件被触发,可以使用 WithoutModelEvents trait。
call() 调用的子 Seeder。
实战示例:博客应用的 Seeder
以一个包含用户与帖子的博客应用为例,来搭建初始数据。下一步
Eloquent 入门
学习如何通过 Eloquent ORM 获取和操作已通过 Seeder 写入的数据。