带有中间表的两个模型之间的关系

时间:2019-07-02 12:41:19

标签: laravel laravel-5 eloquent laravel-5.8

花了数小时进行尝试和失败,阅读文档,并试图将文档转换为我在Laravel中面临的挑战。

最糟糕的是,我不认为这个问题很难解决,但是我的头无法正常工作。

我正在使用的Laravel应用是环法自行车赛幻想经理。我有RiderStage模型,还有中间的RiderStageStatus模型,我将在其中存储有关骑手是否要加入舞台的信息。我也想实现阶段结果,所以我想稍后会再次出现该问题。

但是,我的数据库如下所示:

riders
- id
- name
- ...

stages
- id
- departure
- arrival
- ...

statuses
- id
- name
- ...

rider_stage_statuses
- id
- rider_id
- stage_id
- status_id

因此,我应该能够了解某个阶段Stage::find(1)->riders的骑手及其状态,还应该获取每个阶段Rider::find(1)->stages的骑手的状态。

但是我无法在模型中建立正确的关系。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

解决方案1 ​​

The documentation显示您可以添加一个额外的参数来告诉Laravel将哪个表用作数据透视表。

按如下所示构建课程:

一流的骑手

class Rider {

    public function stages() {
        return $this->belongsToMany(Stage::class, 'rider_stage_statuses');
    }
}

上课阶段

class Stage {

    public function riders() {
        return $this->belongsToMany(Rider::class, 'rider_stage_statuses');
    }
}

解决方案2

我们还可以通过修复intermediate table来修复您的代码。

谁应该这样构造您的代码:

一流的骑手

class Rider {

    public function stages() {
        return $this->belongsToMany(Stage::class)->using(RiderStageStatus::class);
    }
}

上课阶段

class Stage {

    public function riders() {
        return $this->belongsToMany(Rider::class)->using(RiderStageStatus::class);
    }
}