Laravel 4:与许多人有额外的关系

时间:2013-11-04 10:17:53

标签: php mysql sql laravel-4 eloquent

我遇到了Laravel 4和“多对多”查询关系的问题。 我有四张桌子:

  1. 用户
  2. 需要
  3. 货币
  4. user_needs
  5. User_Needs包含用户和需求之间的“多对多”关系。描述如下

    id - user_id - need_id - currency_id - price
    

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

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

    用户,其中包含Model类文件中belongsToMany的函数:

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

    功能的

    需要

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

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

    Laravel文档避免使用“如何加入3个包含多对多”的主题,这有点烦人......

    编辑:如果有可能找到一个没有中级模型的解决方案,比如UserNeeds那么就会感激不尽

    感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

编辑:您还可以使用相同的user_needs表并在定义关系时指定所有内容来执行Currency belongsToMany Users关系。

// in currency model

return $this->belongsToMany('User', 'user_needs', 'user_id', 'currency_id');