播种一对多的关系

时间:2015-09-26 01:55:38

标签: php laravel laravel-5 seed

我正在为RPG游戏创建API(Laravel 5),并且正在尝试播种数据。

每个级别包含许多任务,每个任务属于一个级别。

通过Laravel docs查看,我只看到插入相关模型数据的关系:一个(associate)和许多:多个(sync, attach),但示例中没有任何内容一个:很多(level has many quests, but quests only have one level)。

你可以在下面的播种中看到我试图将多个任务随机关联到关卡。我还尝试了attachsync,但却得到错误

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: associate()

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: attach()

关卡模型:

public function quests()
{
    return $this->hasMany(Quest::class);
}

任务模型:

public function levels()
{
    return $this->belongsTo(Level::class);
}

水平播种机:

public function run()
{
    Eloquent::unguard();

    $levels = $this->createLevels();

    $quests = Quest::all()->toArray();

    /*
     * Randomly join level id with associated quest ids
     */
    foreach ($levels as $level) {

        $level->quests()->associate($quests[rand(0, count($quests) - 1)]['id']);
    }

2 个答案:

答案 0 :(得分:4)

您可以使用save()方法,如@Mithredate所述。

foreach ($levels as $level) {
    $quest->levels()->save($level);
}

答案 1 :(得分:1)

使用雄辩的save()方法。您可以找到文档here