当前位置: 首页 > 知识库问答 >
问题:

多对多Laravel与多个中间表的雄辩关系

皇甫心思
2023-03-14

我使用的是Laravel 5.4,其模型和表格结构如下:

users
-----
id

accounts
--------
id

holdings
--------
id
account_id (foreign key to account)

user_accounts
-------------
id
user_id
account_id
  • 一个用户可以有多个账户
  • 一个帐号可以被多个用户共享
  • 每个账户有多个持有量
  • 因此,用户通过他们的许多帐户间接拥有许多资产。

我需要帮助在用户模型上定义一个称为“持有量”的关系,以获得适用于用户的所有持有量(基于他们所链接的账户)。

我尝试了很多不同的东西,在谷歌上花了很长时间。我可以接近BelongToMany和hasManyThrough,但它们似乎只适用于3个表关系,其中中间表存储来自其他表的主键。如果我使用holdings表上的account_id外键来消除通过accounts表连接的需要,我可以将我的关系减少到3个表(而不是4个),但是我似乎无法实现这一点。

belongtomany-持有id需要是holdings账户id

select * from `holdings`
inner join `user_accounts` on `holdings`.`id` = `user_accounts`.`account_id`
where `user_accounts`.`user_id` = ?

hasManyThrough-用户帐户id需要是用户帐户帐户id

select * from `holdings`
inner join `user_accounts` on `user_accounts`.`id` = `holdings`.`account_id`
where `user_accounts`.`user_id` = ?"

共有1个答案

扈高逸
2023-03-14

这并不是严格意义上的回答,因为我问的是Laravel5.4,但这是一个可能的解决方案。

事实证明,我很幸运,因为我遇到了这个在两个表上定义本地键的Laravel属性托多关系,这表明属性托多关系在Laravel 5.5中得到了增强,以支持这种类型的场景。

我已经将我的项目升级到L5.5,并用关系替换了我的黑客:

return $this->belongsToMany(Holding::class, 'user_accounts', 'user_id', 'account_id', null, 'account_id');

我很高兴地说,它似乎工作得很完美——至少对于我的用例basic GET来说,我还没有尝试过任何更新等等。

感谢@cyberfly和那些在上面发布答案的人

 类似资料:
  • 我有三个模型用户,电子邮件和电话和数据库表用户,电子邮件和电话与下列列提到。 现在,我在用户模型中使用以下函数,使用雄辩的ORM一对多关系建立用户与电子邮件和电话的关系 我想知道有必要使用hasMany()方法两次,或者有其他更好的方法吗?

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)

  • 我正在使用Laravel 5创建一个博客,但我对多对多(通过透视表)关系有一个奇怪的问题。我的DB设置如下: 文章表: id|bigint|20|PK|不为空|自动增量 title|varchar|255|不为空 body|text|不为空 category_id|bigint|20|不为空 created_at|时间戳|不空 updated_at|时间戳|非空 已发布|布尔值|非空 delete

  • 在我的应用程序中,我更新了从一对多到多对多的关系,我试图找出一种持久化关联功能的方法。 假设我有两个相关的表,例如狗和主人。如果我有一系列的主人,并且我正试图为这些主人获取一份狗的id列表,我应该如何雄辩地做到这一点? 这里也提出了类似的问题:https://laracasts.com/discuss/channels/laravel/getting-many-to-many-related-da

  • 我的结构如下: 3张表格:电影、演员、类型 电影表模式: 类型表架构: 演员表架构: 电影模组: 体裁模态: 演员模式: 表格: 我使用以下控制器方法从表单发布数据,一切正常,但当我提交2部电影具有相同的流派,例如“动作/戏剧”,我在流派表中得到2个单独的条目,如: id:1名称:动作/戏剧 ID: 2名称:动作/戏剧 对于一个特定的流派类型,反复使用单个id的最佳方法是什么?例如,如果我添加了1