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 来开发无限极分类