首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel关系:具有来自其他两个表的ids的表

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

Stack Overflow用户
提问于 2017-06-23 08:24:22
回答 1查看 176关注 0票数 0

我的数据库里有两张桌子:‘旅游’和‘游客’。

一个‘旅游’可以有很多‘旅游’,‘游客’可以参加许多‘旅游’。所以,我已经成功地通过‘begonsToMany’关系(当添加行“旅游”和‘游客“中间表'tour_tourist’也给出一行。

"tour_tourist“表结构是:

代码语言:javascript
复制
tour_id | tourist_id
      1 | 37
      1 | 38
      1 | 39

( id为37,38和39 go的游客以id=1作为旅游目的地)

问题是:“游客”(37、38或39 )中的一个可能是“旅游”的“买家”(从上表1)。因此,只有一个人支付旅游费用。另外,这个人也可以去旅游/只付钱。我传递这个数据(旅游,游客,谁是买家,他会去旅游)时,提交一个旅游通过网络表格。

因此,我想创建第三张桌子,名为“买家”,代表一个“游客”,谁支付了旅游费用:

代码语言:javascript
复制
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?)

感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-06-23 08:53:00

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

tour_tourist表的结果可能如下所示:

代码语言:javascript
复制
tour_id | tourist_id | is_payer | is_tourist
   1    |     37     |     1    |     0/1
   1    |     38     |     0    |      1
   1    |     39     |     0    |      1

然后,通过雄辩,您可以使用withPivot方法链接belongsToMany方法来访问额外的列。

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

旅游

代码语言:javascript
复制
class Tour extends Eloquent {
  protected $table = 'tours';

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

结果,您将得到is_payer & is_tourist

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44716569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档