Laravel Relationship:一张包含其他两个表的id的表

时间:2017-06-23 08:24:22

标签: laravel relationship

我有两张桌子:'旅游'和#'游客'在我的数据库中。

A' tour'可以有很多旅游者和旅游者#39;可以参加很多游览。 所以,我已经成功通过&begonsToMany"关系(将行添加到"游览'游客"中间表' tour_tourist'也会有一行。

" tour_tourist"表结构是:

tour_id | tourist_id
      1 | 37
      1 | 38
      1 | 39

(身份证号为37,38和39的游客可以参加id = 1的游览)

问题:游客中的一个' (来自上一个例子的37或38或39)可以是买家'游览' (上表1)。所以只有一个人支付旅行费用。此人也可以去参观/仅支付费用。我通过网络表格提交旅行时传递了这些数据(游览,游客,谁是买家,他是否参加了旅行)。

所以我想创建一个名为'买家'代表一个旅游者#34;谁支付了旅游费用:

tour_id | tourist_id | is_tourist
   1    |     39     |     0

(1。一个' tour_id'只能匹配一个' tourist_id')

(2。' tourist_id'应该是之前' tour_id'以及#34; tour_tourist' 34;表 - 旅游者39属于旅游1 - 见上表。

(3。' is_tourist'是1/0,意味着买家去参观/仅支付,在我的例子中它是0 - 他只支付,没有&#39 ; t go)。

我想知道如何使用Eloquent关系(一对一?hasManyThrough?)来实现这一点。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

可能更简单的方法是在is_payer表中创建另外两个名为is_touristtour_tourist的列,以避免创建第三个表。

tour_tourist表的结果可能是这样的:

tour_id | tourist_id | is_payer | is_tourist
   1    |     37     |     1    |     0/1
   1    |     38     |     0    |      1
   1    |     39     |     0    |      1

然后,凭借雄辩,您只需使用withPivot方法链接belongsToMany方法,即可轻松访问您的额外列。

例如,您的Tour模型可以是这样的:

<强>游

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

  public function tourists() {
    return $this->belongsToMany('Tourist')->withPivot('is_payer', 'is_tourist');
  }
}

在结果中,您将获得is_payer&amp; is_tourist

然后,您可以使用Collection方法将其过滤掉。