【问题标题】:Multiple level deep hasMany relationships in Laravel EloquentLaravel Eloquent 中的多级深度 hasMany 关系
【发布时间】: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?

标签: mysql laravel eloquent


【解决方案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 进行更改。

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

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 2016-03-17
    • 1970-01-01
    • 2015-12-22
    • 2021-05-05
    • 1970-01-01
    • 2014-10-29
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多