以下是我的人际关系:
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
这就是我到目前为止所得到的:
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”,就会检索到用户。但是,如果我搜索“汽车和摩托车”或“汽车和飞机”,则不会检索到用户。
我希望查询搜索给定用户的所有证明。
我该怎么做呢?
发布于 2021-03-06 19:31:26
尝尝这个
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();https://stackoverflow.com/questions/66503539
复制相似问题