我的数据库里有两张桌子:‘旅游’和‘游客’。
一个‘旅游’可以有很多‘旅游’,‘游客’可以参加许多‘旅游’。所以,我已经成功地通过‘begonsToMany’关系(当添加行“旅游”和‘游客“中间表'tour_tourist’也给出一行。
"tour_tourist“表结构是:
tour_id | tourist_id
1 | 37
1 | 38
1 | 39
( id为37,38和39 go的游客以id=1作为旅游目的地)
问题是:“游客”(37、38或39 )中的一个可能是“旅游”的“买家”(从上表1)。因此,只有一个人支付旅游费用。另外,这个人也可以去旅游/只付钱。我传递这个数据(旅游,游客,谁是买家,他会去旅游)时,提交一个旅游通过网络表格。
因此,我想创建第三张桌子,名为“买家”,代表一个“游客”,谁支付了旅游费用:
tour_id | tourist_id | is_tourist
1 | 39 | 0
(1 )一个'tour_id‘只能匹配一个'tourist_id')
(2.“tourist_id”应是前一张“tour_id”表中“属于”tour_id的人之一-游客39属于旅游1-见上表)。
(3. 'is_tourist‘是1/0,意思是买家去参观/只付款,在我的例子中是0-他只付钱,不付款)。
我想知道如何使用雄辩的关系(一对一)来做这件事?hasManyThrough?)
感谢你的帮助。
发布于 2017-06-23 00:53:00
更简单的方法可能是在您的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
方法来访问额外的列。
例如,您的旅游模型可以是这样的:
旅游
class Tour extends Eloquent {
protected $table = 'tours';
public function tourists() {
return $this->belongsToMany('Tourist')->withPivot('is_payer', 'is_tourist');
}
}
结果,您将得到is_payer
& is_tourist
。
然后,您可以使用Collection方法将它们过滤掉。
https://stackoverflow.com/questions/44716569
复制相似问题