Laravel关系:具有来自其他两个表的ID的表

Laravel关系:具有来自其他两个表的ID的表,laravel,relationship,Laravel,Relationship,我的数据库里有两张桌子:“旅游”和“游客” 一次“旅游”可以有许多“游客”,而“游客”可以参与许多“旅游”。 因此,我成功地通过“BeginsToMany”关系将它们关联起来(当向“tours”和“游客”添加行时,中间表“tours\u Tourism”也会给出一行 “旅游者”表结构为: tour_id | tourist_id 1 | 37 1 | 38 1 | 39 (id为37、38和39的游客可参加id=1的旅游) 问题:其中一个“游客”(37或38

我的数据库里有两张桌子:“旅游”和“游客”

一次“旅游”可以有许多“游客”,而“游客”可以参与许多“旅游”。 因此,我成功地通过“BeginsToMany”关系将它们关联起来(当向“tours”和“游客”添加行时,中间表“tours\u Tourism”也会给出一行

“旅游者”表结构为:

tour_id | tourist_id
      1 | 37
      1 | 38
      1 | 39
(id为37、38和39的游客可参加id=1的旅游)

问题:其中一个“游客”(37或38或39来自abouve示例)可能是“旅游”的“买家”(上表中的1个)。因此只有一个人为旅游付费。这个人也可以去旅游/只为旅游付费。我在通过web表单提交旅游时传递此数据(旅游,游客,谁是买家,他是否去旅游)

因此,我想创建第三个表,称为“买家”,代表支付旅游费用的“游客”:

tour_id | tourist_id | is_tourist
   1    |     39     |     0
(1.一个“旅游id”只能与一个“旅游id”匹配)

(2.“旅游者id”应为前一张“旅游者”表中“属于”旅游者id的人之一-旅游者39属于旅游者1-见上表)

(3.“is_Tourism”是1/0,表示买家去旅游/只付款,在我的示例中是0-他只付款,不去)

我想知道我如何利用雄辩的关系(一对一?hasManyThrough?)做到这一点


感谢您的帮助。

可能更简单的方法是在
tour\u tourism
表中创建另外两个名为
is\u payer
is\u tourism
的列,以避免创建第三个表

您的
tour\u tourism
表的结果可能如下所示:

tour_id | tourist_id | is_payer | is_tourist
   1    |     37     |     1    |     0/1
   1    |     38     |     0    |      1
   1    |     39     |     0    |      1
然后,使用eloquent,您只需使用
withPivot
方法链接您的
belongTomany
方法即可访问额外的列

例如,您的巡演模型可以如下所示:

tour_id | tourist_id | is_payer | is_tourist
   1    |     37     |     1    |     0/1
   1    |     38     |     0    |      1
   1    |     39     |     0    |      1
巡回演出

class Tour extends Eloquent {
  protected $table = 'tours';

  public function tourists() {
    return $this->belongsToMany('Tourist')->withPivot('is_payer', 'is_tourist');
  }
}
结果是,
是付款人
是旅游者


然后,您可以使用收集方法将它们过滤掉。

您真的需要第三个表吗?您不应该只在旅游表中添加一列“买家id”吗(因为只能有一个买家)?如果没有“is\u Tourism”“我会这么做。但因为我有一个额外的论点,在我看来,最好为买家设立一个单独的表格……但如果游客在tour_Tourism表格中,并且他与该旅游相关,则“is_Tourism”已经是隐式的。作为游客,您将拥有重复的信息。在“买家”表格和“旅游者”表你所说的“隐含”是什么意思,Amarnasan?:)不管怎样,我真的很想知道怎么做!:)我所说的“隐含”是指你已经知道买家是否是旅行者的信息,因为你已经在旅游者页面上知道了这些信息。抱歉这么挑剔,但我只想让你的代码(和生活)成为现实不需要太复杂:)谢谢你,艾哈迈德!我已经考虑过了,这是一个很好的解决问题的方法。但它并不完美,因为我们在“is_payer”和“is_Tourism”中有很多额外的0和1。创建第三个表对我来说只是一种挑战,我认为如果可以的话,我会成为一个更好的laravel开发人员处理这样的问题。如果愿意,您可以随时使用第三个表。为了访问第三个表,您可以使用嵌套的即时加载。例如:
Tour::with(['tiversers'=>function($q){$q->with('payers')}])