Laravel Eloquent 中的多级深度 hasMany 关系

Posted

技术标签:

【中文标题】Laravel Eloquent 中的多级深度 hasMany 关系【英文标题】:Multiple level deep hasMany relationships in Laravel Eloquent 【发布时间】:2020-03-12 08:55:01 【问题描述】:

我有一个用户模型,它将添加客户,他们将拥有 PermanentAddress(客户表中的 ID 以引用他们的地址),其中将有部门,将有地区,最后将有许多子地区。

类似 hasMany 和 belongsTo 关系的表格-

    - Users
       - Clients
          - PermanentAddresses (keeping the IDs of the subsequent child areas and client_id)
             - Divisions
                - Districts
                    - Subdistricts

我如何从特定的分区中获取所有客户,这些客户将属于地区等,一直到客户。

所有这些级别都使 eloquent/join 查询变得疯狂。一些线索将不胜感激。这个HasMany Deep Relationship 有相同的但没有答案来实现这一点而不使用包。不过情况也差不多。

【问题讨论】:

你尝试过 hasManyTrough 关系还是 Laravel? 我认为,或者您应该使用查询生成器,或者您必须在数据库中创建一个视图来连接所有这些表,然后您必须使用查询生成器查询该表.... Eloquent Can '不提供这么多层次的关系深度,最多 2 与 hasManyTrough Eloquent 是否生成“递归 CTE”SQL? 【参考方案1】:

这是一个明显的例子 whereHas see https://laravel.com/docs/5.8/eloquent-relationships#querying-relationship-existence

Clients::whereHas('PermanentAddresses.Divisions.Districts.Subdistricts', function ($q) use ($subDistrictID) 
  $q->whereId($subDistrictID);
)->get();

根据你的关系把'PermanentAddresses.Divisions.Districts.Subdistricts'这个改成。

这里$subDistrictID 是您的分区表的 ID,如果您认为它可能不是 ID,或者您的查询将是其他内容,请根据该 ID 进行更改。

我没有测试,但它应该可以工作。

【讨论】:

以上是关于Laravel Eloquent 中的多级深度 hasMany 关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel Eloquent 的 hasMany 来开发无限极分类

使用 Laravel Eloquent 的 hasMany 来开发无限极分类

laravel eloquent 中的一对多关系

使用 eloquent 截断 laravel 中的所有表

如何从 Laravel 8 Eloquent 中的嵌套关​​系中获取数据?

如何在 laravel 8 eloquent 中计算价值? [复制]