我不明白为什么这不起作用:
Device::with(['travel.move.position' => function($q) use ($start, $end) {
return $q->whereBetween('created_date', [$start, $end]);
}]);
Run Code Online (Sandbox Code Playgroud)
我认为它应该给我所有有travel->move->position
关系的设备,但只有那些position.datetime
介于$start
和$end
我试过类似的东西
Device::whereHas('travel.move.position', function($q) use ($start, $end) {
return $q->whereBetween('created_date', [$start, $end]);
});
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,但我没有得到渴望的关系。
添加了对答案 1 的查询:
select *
from `devices`
where exists (
select * from `travels`
inner join `travel_info` on `travel_info`.`id` = `travels`.`info_id`
where `devices`.`id` = `travel_info`.`device_id`
and exists (
select *
from `moves`
where `moves`.`travel_id` = `travels`.`id`
and exists (
select * from `positions`
where `moves`.`position_id` = …
Run Code Online (Sandbox Code Playgroud)