Laravel 5.1 - 3个表之间的数据透视表
Posted
技术标签:
【中文标题】Laravel 5.1 - 3个表之间的数据透视表【英文标题】:Laravel 5.1 - pivot table between 3 tables 【发布时间】:2015-10-04 16:12:46 【问题描述】:我对 Laravel 比较陌生,过去 3 周的实习期间一直在研究它,但是现在我遇到了问题。
我有 3 个表:Users、Bids 和 Jobs。我希望用户能够对工作进行投标。
我的表的基本结构如下:
Users:
id | name | email | description
Jobs:
id | title | description
Bids:
id | proposal
需要满足以下条件:
-
一个用户可以对多个职位投标,但每个职位只能投标一次。
一个作业可以有来自多个用户的多个投标。
每个投标只与一个用户和一个工作相关联。
示例: 用户 1 对作业 1 提出 300 英镑的提案。这将创建一个 ID 为 1 的出价和 300 英镑的提案。数据透视表将包含用户 id(1)、工作 id(1) 和投标 id(1) 以及默认设置为待处理的状态。
我还希望链接所有 3 个的表具有状态。我创建了一个如下:
bid_job_user:
bid_id | user_id | job_id | status
但是关系都是错误的,所以如果我想更新状态,同步方法等将无法正常工作。 感谢任何帮助,即使这只是我应该如何定义我的关系。
我无法将用户链接到表(job_user)中的作业,因为这已经在其他地方定义为多对多关系,因为经理(用户)可以创建许多作业,并且许多经理可以创建作业。
如果您需要更多信息,请询问。
【问题讨论】:
难道不是User -< bid >- Job
你说用户和工作(创建它们的用户)之间已经存在连接,所以唯一剩下的连接就是其他用户的出价?
@AbstractChaos 只有某些用户可以创建job_user 表所代表的作业。我希望用户对工作进行投标,因此需要一个新表,不是吗?如果是你,你会如何创建表格?
@caselouisee 是的,你已经有一个 job_user 表来指示谁可以创建工作,所以你不需要重新定义它。对我来说,听起来你只需要一个投标表(id、user_id、job_id、status、proposal)来将用户(在这种情况下为投标人)连接到工作。
@AbstractChaos 如果我这样做,我将如何定义关系?即 public function user() return $this->belongsTo('App\User', 'bids'); public function job() return $this->belongsTo('App\Job','bids');
【参考方案1】:
要创建出价表(根据 cmets),您可以将其视为交集实体。
<!-- User.php -->
//should recognize user_id,job_id by itself
public function bidsMade()
return $this->belongsToMany('App\Job','bids')->withPivot('status','proposal');
<!-- Job.php -->
//should recognize user_id,job_id by itself
public function bidsRecieved()
return $this->belongsToMany('App\User','bids')->withPivot('status','proposal');
【讨论】:
谢谢!这行得通,现在只需要投标模型关系,但我很乐意自己解决这个问题。在我有 15 个代表之前不能投票给你 -.- 但非常感谢你!! AbstractChaos,caseylpuisee,我也需要同样的问题,请问你能把代码最终显示出来吗?以上是关于Laravel 5.1 - 3个表之间的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章