是否可以在 Laravel 中获取数据透视表与另一个表的关系?

Posted

技术标签:

【中文标题】是否可以在 Laravel 中获取数据透视表与另一个表的关系?【英文标题】:Is it possible to get the relation of a pivot table to another table in Laravel? 【发布时间】:2020-03-23 21:37:33 【问题描述】:

我有一个当前具有此架构的培训应用:

trainings
id
name

speakers
id
first_name
last_name

training_speaker
id
training_id
speaker_id

training_speaker_dates
id
training_speaker_id
date
time

一个训练可以有多个演讲者,一个演讲者可以有多个训练。目前,我正在通过其枢轴模型访问培训演讲者。

class Training 
  public function speakers() 
    return $this->belongsToMany('App\Speaker')->using('App\TrainingSpeaker');
  
 

假设我们有一个为期 3 天的培训,演讲者可以参加第一天,也许只是上午,这就是为什么 training_speaker_dates 有日期和时间(下午的上午)。

是否可以在 Training 类下的扬声器方法中也包含 training_speaker_dates

或者,我应该删除training_speaker_dates 并将字段添加到training_speakers 表并允许具有唯一ID 的重复值(training_id 和speaker_id)吗?那么它看起来像这样

training_speaker
id
training_id
speaker_id
date
time

【问题讨论】:

不知道是否可以不使用第三方软件包或不通过您自己实现某种“有很多”。但是,您为什么没有使用datetime 作为training_speaker 表上的枢轴属性? @user3532758 我在存储在 training_speaker 时使用 attach 方法,所以我只能保存一个我猜的唯一的 training_id 和 speaker_id 啊!我知道了。因为有id 我想你可能已经计划在那里重复配对。我之前在类似的情况下使用过syncWithoutDetaching。对不起,我帮不上忙,希望有更多经验的人能来。无论如何,祝你好运。 别担心@user3532758 伙计!感谢您分享您的想法。 【参考方案1】:

试试这个

class Training 
  public function trainingspeakerdates() 
    return $this->hasMany('App\Trainingspeakerdates','training_speaker_id','id')->using('App\TrainingSpeaker');
  
 

【讨论】:

抱歉,我需要先访问扬声器并附上每个扬声器的日期。

以上是关于是否可以在 Laravel 中获取数据透视表与另一个表的关系?的主要内容,如果未能解决你的问题,请参考以下文章

可以将数据透视表与 laravel 5.5 中的另一个数据透视表相关联吗?

如何使用 Laravel 将两个表与数据透视表连接起来?

Laravel 5 - 从数据透视表额外属性获取属性

在 Eloquent 中将数据透视表与多个表连接起来

检查belongsToMany关系是否存在 - Laravel

试图在资源 Laravel 中返​​回数据透视表