在 L4 的新种子功能中是否有一种简单的方法来管理多对多关系?
一种方法是为数据透视表制作种子,但我会做很多工作。
对这类事情的良好工作流程有什么想法吗?
在 L4 的新种子功能中是否有一种简单的方法来管理多对多关系?
一种方法是为数据透视表制作种子,但我会做很多工作。
对这类事情的良好工作流程有什么想法吗?
在最新版本的 Laravel 4 中,您可以在 DatabaseSeeder 类的“运行”方法中定义所有播种脚本的运行顺序。
public function run()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
$this->call('PrimaryTableOneSeeder');
$this->command->info('The first primary table has been seeded!');
$this->call('PrimaryTableTwoSeeder');
$this->command->info('The second primary table has been seeded!');
$this->call('PivotTableSeeder');
$this->command->info('The pivot table has been seeded!');
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
您会注意到我在运行所有种子之前和之后禁用了外键约束。这可能是不好的做法,但这是我可以使用 truncate 函数重新设置每个表的 id 计数的唯一方法。如果您按照插入相关模型的指南进行操作,则可能不需要此做法。
class PrimaryTableOneSeeder extends Seeder {
public function run()
{
DB::table('primaryone')->truncate();
Primaryone::create(array(
'field' => 'value',
'created_at' => new DateTime,
'updated_at' => new DateTime
));
}
要像我在示例中所做的以及最新版本的文档那样使用质量分配,您需要为模型指定一些受保护的或可填充的列。为此,只需将属性添加到您的模型中,如下所示:
class Primaryone extends Eloquent {
protected $guarded = array('id');
Laravel 种子文件是常规的 PHP 脚本(除了它们需要返回一个数组)。您可以在种子文件中查询数据库(使用 Eloquent、Fluent builder 甚至 PDO)。
解决多对多问题的一种方法是故意命名您的种子文件,以便最后填充数据透视表...例如,您可以在文件名前添加一个数值(即 1_authors.php、2_books. php、3_authors_books.php 等)。Artisan 在执行文件之前按字母顺序对文件名进行排序。
我已经发布了一个关于Laravel 4 数据库播种的小教程——这应该能让你继续前进。另外,你可以参考官方的种子文档。
种子用于简单信息、测试数据和静态信息。我不建议用它来处理关系。就个人而言,我只将它用于每个表的 2 或 3 条记录,以帮助测试我的应用程序。
在开发应用程序时,请考虑先处理数据输入(管理)区域,然后再处理前端。这样您就可以轻松添加测试数据。