首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Eloquent:遍历嵌套关系

Laravel Eloquent:遍历嵌套关系
EN

Stack Overflow用户
提问于 2021-03-06 15:54:07
回答 1查看 66关注 0票数 0

以下是我的人际关系:

User hasMany licences

Licence belongsTo User

Licence hasMany attestations

Attestation belongsTo Licence

Attestation hasMany vehicles

Vehicle belongsTo Attestation

示例:

用户

id | name

1 | John Doe

许可证

id | user_id | type

1 | 1 | A

2 | 1 | B

证明

id | licence_id | date

1 | 1 | 2020-12-05

2 | 1 | 2021-02-14

3 | 2 | 2021-03-02

车辆

id | attestation_id | type

1 | 1 | car

2 | 1 | boat

3 | 2 | motorcycle

4 | 2 | truck

5 | 3 | plane

6 | 3 | train

这就是我到目前为止所得到的:

代码语言:javascript
复制
 User::whereHas('licences', function($query) use($search) {
      if (!empty($search['licence_type'])) {
         $query->where('type', $search['licence_type']);
      }

    $query->whereHas('attestations', function($query) use($search) {

        if (isset($search['vehicles'])) {
            foreach ($search['vehicles'] as $vehicle) {
                $query->whereHas('vehicles', function($query) use($search, $vehicle) { 
                    $query->where('type', $vehicle);
                }); 
            }   
        }   
    });
})->get();

现在,在我的过滤器中,如果我搜索“car”,就会检索到用户。但是,如果我搜索“汽车和摩托车”或“汽车和飞机”,则不会检索到用户。

我希望查询搜索给定用户的所有证明。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 19:31:26

尝尝这个

代码语言:javascript
复制
User::whereHas('licences', function($query) use($search) {
  if (!empty($search['licence_type'])) {
     $query->where('type', $search['licence_type']);
  }

  $query->whereHas('attestations', function($query) use($search) {
    if (isset($search['vehicles'])) {
        $query->whereHas('vehicles', function($query) use($search, $vehicle) { 
            $query->whereIn('type', $search['vehicles']);
        }); 
    }   
  });
})->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66503539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档