小编kan*_*hin的帖子

Laravel:过滤嵌套关系?

我不明白为什么这不起作用:

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)

relationship laravel

4
推荐指数
1
解决办法
2145
查看次数

标签 统计

laravel ×1

relationship ×1