【发布时间】:2013-12-01 02:59:56
【问题描述】:
我有一个现有的用户表,其中包含通过来自 UserSeeder.php 的db:seed 播种的信息。现在,我正在添加新的产品表,并希望将信息播种到产品表中。如何防止 Laravel 将 UserSeeder 播种到数据库中,但只播种新的 ProductSeeder?
谢谢。
【问题讨论】:
我有一个现有的用户表,其中包含通过来自 UserSeeder.php 的db:seed 播种的信息。现在,我正在添加新的产品表,并希望将信息播种到产品表中。如何防止 Laravel 将 UserSeeder 播种到数据库中,但只播种新的 ProductSeeder?
谢谢。
【问题讨论】:
您可以通过类名来调用各个种子类。 来自docs。
默认情况下,db:seed 命令运行 DatabaseSeeder 类,该类 可用于调用其他种子类。但是,您可以使用 --class 选项指定要单独运行的特定播种器类:
php artisan db:seed --class=ProductTableSeeder
在上面的例子中,ProductTableSeeder 类应该存在于database/seeds 中。
【讨论】:
Vendor\\Foo\\Seeders\\DatabaseSeeder
composer dump-autoload。否则你会得到“Class XySeeder 不存在”
这是一个使用类完整命名空间的工作示例:
应该使用双反斜杠\\。
类名是DefaultBannersSeeder。
php artisan db:seed --class=App\\Containers\\Banners\\Data\\Seeders\\DefaultBannersSeeder
【讨论】:
您还可以编辑您的database/seeders/DatabaseSeeder.php 文件的$this->call() 指令:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
UserTableSeeder::class,
PermissionsSeeder::class
]);
}
}
【讨论】: