繁体   English   中英

Laravel Eloquent WhereHas 带有 ORDER 列

[英]Laravel Eloquent WhereHas with ORDER column

我有一个 whereHas 查询,它从 pivot 表中获取数据。 但是在 pivot 表上,我还有一个名为“订单”的额外列,我使用此列来确保项目以正确的顺序排序,因为它代表了一条公交路线。 例如:巴士/渡轮停靠在 1 2 3 4 5 6。

我们有一个出发点和目的地点,表示为“port_id”。

因此,例如,下面的查询为我提供了正确的数据,但我需要确保“订单”列始终根据出发港口 ID 和到达港口 ID 以正确的顺序排列。 因此,如果您搜索 port_id 14 到 port_id 15 它不应该返回任何结果,因为“订单”列没有以这种方式连接这些结果。

这是我尝试过的:

        $routes = Route::whereHas('ports', function($query) use ($request) {
       $query->where('port_id', $request->route['from']['id']);
    })
    ->whereHas('ports', function($query) use ($request) {
        $query->where('port_id', $request->route['to']['id']);
    })->get();

这是 pivot 表: 在此处输入图像描述

这是路由表: 在此处输入图像描述

谢谢你。

我认为您可以使用 join 进行排序,然后按 route_id 排序结果,然后按“order”列排序:

$routes = Route::whereHas('ports', function($query) use ($request) {
       $query->where('port_id', $request->route['from']['id']);
    })
    ->whereHas('ports', function($query) use ($request) {
        $query->where('port_id', $request->route['to']['id']);
    })
->join('route_port','route_port.route_id','=','routes.id')
->join('ports','route_port.port_id','ports.id')->orderby('route_id')
->orderby('order')->get();

如果表名有误,请更正...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM