拉拉维尔4:多对多,有额外的关系


Laravel 4: Many to Many with extra relationship

我对Laravel 4和"多对多"查询关系有问题。我有四个表:

  1. 用户
  2. 需要
  3. 货币
  4. user_needs

User_Needs包含用户和需求之间的"多对多"关系。 描述如下

id - user_id - need_id - currency_id - price

ID 是自动增量、PK 等...user_id是用户的 FK 表,need_id是需求 FK 表,currency_id当然是货币的 FK 表。价格是浮动的。

在Laravel 4模型文件夹中,我创建了以下模型

模型类文件中具有属于ToMany函数的用户:

public function needs()
{
return $this->belongsToMany('Need','user_needs','user_id','need_id')->withPivot('price');
}

需要与属于的功能到许多

public function users()
{
    return $this->belongsToMany('User','user_needs','user_id','need_id')->withPivot('price');
}

如果我只使用这两个模型,一切正常,问题是我必须添加"currency_id",因为每个用户都可以为每个需求设置货币,我不知道如何更新我的模型来做到这一点。目前,我的货币模型目前没有BelongsToMany,因为我不知道如何实现它。

Laravel文档避免了"如何用多对多连接3个表"的主题,这有点烦人...

编辑:如果可能的话,找到一个没有像UserNeeds这样的中间模型的解决方案,这将是磨碎

感谢您的帮助。

我在

尝试为用户/项目关系分配角色时遇到过这样的情况。

您的currency_id应该只是user_needs数据透视表中的另一列,因为是关系的属性。 (如你所见)。

使用user_needs表中的currency_id列,更新"withPivot"以包含currency_id,您将拥有查询用户需求关系时所需的所有数据。

编辑:您还可以使用相同的user_needs表并在定义关系时指定所有内容来执行货币属于许多用户关系。

// in currency model
return $this->belongsToMany('User', 'user_needs', 'user_id', 'currency_id');