我有两张桌子:'旅游'和#'游客'在我的数据库中。
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?)来实现这一点。
感谢任何帮助。
答案 0 :(得分:0)
可能更简单的方法是在is_payer
表中创建另外两个名为is_tourist
和tour_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方法将其过滤掉。