khalyomede / laravel-seed
运行种子文件就像运行迁移文件一样。
Requires
- php: >=7.0.0
- illuminate/database: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
- jawira/case-converter: 3.*
This package is auto-updated.
Last update: 2024-09-29 06:02:43 UTC
README
运行种子文件就像运行迁移文件一样。
摘要
关于
我创建了此包,因为我正在与预先填充数据的表(如性别表、产品类型表等)一起工作。
我发现了一系列包,laravel-seeder,看起来已经被多次分叉,但要么包无法正确安装,要么分叉版本真的很旧。
我决定从头开始,创建这个包,目的是使其尽可能接近官方迁移体验。
在这种方法中,每个种子器都是一个类,就像迁移一样:它定义了“up”和“down”方法,因此您可以运行和回滚您的种子。像迁移一样,文件的顺序由创建时的时间戳确定。
我使用此包的场景是在生产环境中填充我的应用程序,为了自动化此过程,无需单独运行每个种子类,也无需手动操作。
先决条件
- PHP >= 7.0.0
- Laravel >= 5.5.0
安装
在您的根项目文件夹中,运行此命令
composer require khalyomede/laravel-seed
对于较旧的Laravel版本,您需要在config/app.php
文件的“Providers”键中注册服务提供者,如下所示
'providers' => [ // ... Khalyomede\LaravelSeed\LaravelSeedServiceProvider::class, ]
用法
创建一个新的种子文件
如“关于”部分中所述,种子器是类驱动的。它们定义了“up”和“down”方法,并且是使用命令行种数据库的唯一方式。
使用Artisan命令
要创建一个新的种子文件,请使用以下Artisan命令行
php artisan seed:make InsertPostCategory
这将创建一个新的种子类,位于database/seeders/2020_07_24_094613_insert_post_categories.php
。如果您打开该文件,它看起来如下所示
class InsertPostCategories { public function up() { // } public function down() { // } }
指定Eloquent模型
通常,种子器会填充由您的Eloquent模型之一模型化的表。
要指定种子文件通过哪个Eloquent模型填充数据,您可以指定以下--model
参数
php artisan seed:make InsertPostCategory --model=PostCategeory
您的种子文件的内容将填充您通常会编写的标准样板代码
use App\PostCategory; class InsertPostCategories { public function up() { PostCategory::insert([ [ "id" => 1, ], ]); } public function down() { PostCategory::destroy([ 1, ]); } }
检查种子状态
如果您需要有关哪些种子已运行或尚未运行的报告,您可以使用以下Artisan命令
php artisan seed:status
这将显示一个表格,每行指定种子状态。
$ php artisan seed:status +------------------------------------------+---------+ | file | status | +------------------------------------------+---------+ | 2020_07_24_094613_insert_post_categories | not ran | +------------------------------------------+---------+ 1 row(s) displayed.
运行种子文件
当您的种子文件准备就绪时,您可以使用此命令运行任何尚未运行的种子文件。
php artisan seed
这也会显示一个表格,总结已成功运行的种子文件。
$ php artisan seed 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% +------------------------------------------+ | file | +------------------------------------------+ | 2020_07_24_094613_insert_post_categories | +------------------------------------------+ 1 seed(s) ran.
回滚种子文件
回滚种子文件可能有助于再次测试一切是否正常。有两种回滚种子文件的方式。
回滚所有内容
如果您确信需要删除所有种子文件,您可以使用以下命令
php artisan seed:reset
这将按相反顺序取回每个种子,并运行它们的down()
方法。
$ php artisan seed:reset 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% +------------------------------------------+ | file | +------------------------------------------+ | 2020_07_24_094613_insert_post_categories | +------------------------------------------+ 1 seed(s) rollbacked.
回滚最后一批种子
当您运行php artisan seed
时,它会为此时运行的种子分配一个“批次”号。
让我们假设您正在创建这个博客帖子Web应用程序。您需要填充一些帖子分类,因此您运行一次php artisan seed
。
此包将把批次号“1”分配给这个第一批种子。
然后,您需要建模作者性别和作者职位(初级或高级)。因此,您创建 Gender
和 Position
模型,种子文件,并再次运行 php artisan seed
。
这样就会为这两个额外的种子关联批次号“2”。
到目前为止,我们已经存储了以下内容
+------------------------------------------+--------------+ | file | batch number | +------------------------------------------+--------------+ | 2020_07_24_094613_insert_post_categories | 1 | | 2020_07_25_065903_insert_genders | 2 | | 2020_07_25_075926_insert_positions | 2 | +------------------------------------------+--------------+
因此,当您运行 php artisan seed:rollback
时,这将依次回滚同一批次的 insert_positions
和 insert_genders
。
$ php artisan seed:rollback 2/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% +------------------------------------+ | file | +------------------------------------+ | 2020_07_25_065903_insert_genders | | 2020_07_25_075926_insert_positions | +------------------------------------+ 2 seed(s) rollbacked.
然后,如果您再次运行 php artisan seed:rollback
,这将单独回滚 insert_post_categories
种子。
$ php artisan seed:rollback 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% +-----------------------------------------+ | file | +-----------------------------------------+ | 2020_07_24_094613_insertpost_categories | +-----------------------------------------+ 1 seed(s) rollbacked.