首页 > 解决方案 > Laravel 播种多对多表

问题描述

所以我有两个具有多对多关系的表,所以我使用一个“链接”表来存储他们的 id 来连接它们。

运动工厂:

$factory->define(Exercise::class, function (Faker $faker) {
    return [
        'name' => $faker->name(),
        'description' => $faker->sentence(),
        'duration' => $faker->numberBetween(1,20),
        'duration_unit' => 'Reps'
    ];
});

部门工厂:

$factory->define(Section::class, function (Faker $faker) {
    return [
        'routine_id' => function(){
            return Routine::all()->random();
        },
        'name' => $faker->word,
        'description' => $faker->sentence(),
    ];
});

部分播种机:

public function run()
{
    factory(App\Section::class,40)->create();
}

练习播种机:

public function run()
{
    factory(App\Exercise::class,120)->create();
}

如何将随机练习与随机部分联系起来?我需要一个单独的工厂/播种机还是我可以以某种方式循环在练习播种机中?由于练习是最后生成的?

标签: laravel

解决方案


感谢这个答案

你可以这样做:

在播种部分和练习之后:

  $sections = App\Section::all();

  App\Exercise::all()->each(function ($exercise) use ($sections) {
        $exercise->sections()->attach(
            $sections->random(rand(1, 3))->pluck('id')->toArray()
        );
    });

推荐阅读