Laravel 4:处理种子关系

And*_*erg 14 database many-to-many laravel laravel-4

有没有一种简单的方法来管理L4的新种子功能中的多对多关系?

一种方法是为枢轴表制作种子,但我会做很多工作.

关于这种事情的良好工作流程的任何想法?

Bea*_*eau 41

在最新版本的Laravel 4中,您可以定义所有播种器脚本在DatabaseSeeder类的"run"方法中运行的顺序.

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;');
}
Run Code Online (Sandbox Code Playgroud)

您会注意到我在运行所有种子之前和之后禁用了外键约束.这可能是不好的做法,但这是我可以使用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
    ));
}
Run Code Online (Sandbox Code Playgroud)

要像我在我的示例中那样使用批量分配,并且作为文档的最新版本,您需要为模型指定一些保护列或可填充列.要做到这一点,只需向您的模型添加属性,如下所示:

class Primaryone extends Eloquent {

protected $guarded = array('id');
Run Code Online (Sandbox Code Playgroud)