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个表之间的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 数据透视表问题

数据透视表的laravel关系问题

Laravel:JSON 和数据透视表

将数据添加到 Laravel 数据透视表

Laravel 自定义数据透视表关系和急切加载?

如何在同一资源LARAVEL中返回数据透视表的数据