Mysql Laravel雄辩,其中有顺序栏

Mysql Laravel雄辩,其中有顺序栏,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有一个whereHas查询,它从数据透视表中获取数据。但在pivot表中,我还有一个额外的列,名为“order”,我使用该列来确保项目按正确的顺序排序,因为它代表公交路线。例:巴士/渡轮站在123456 我们有一个出发点和目的地,用“port_id”表示 例如,下面的查询为我提供了正确的数据,但我需要根据出发港id和到达港id确保“订单”列始终处于正确的顺序。因此,如果您要搜索端口id 14到端口id 15,则不应返回任何结果,因为“订单”列没有以这种方式连接它们 这就是我尝试过的:

我有一个whereHas查询,它从数据透视表中获取数据。但在pivot表中,我还有一个额外的列,名为“order”,我使用该列来确保项目按正确的顺序排序,因为它代表公交路线。例:巴士/渡轮站在123456

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

例如,下面的查询为我提供了正确的数据,但我需要根据出发港id和到达港id确保“订单”列始终处于正确的顺序。因此,如果您要搜索端口id 14到端口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();
这是数据透视表:

这是路由表:


谢谢。

我认为您可以使用join进行排序,然后排序结果 按路线id然后按“订单”列:

$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();

如果表名有误,请更正…

能否分别提供表结构+样本数据+预期结果?这是否回答了您的问题@Tpojka不,没有,谢谢。帮我更好地理解它。请求可能是:
route_id==3
departurePort==14
destinationPort==16
,您希望得到
[14,17,16]
的结果;这是正确的预期吗?@Tpojka查询需要检查“order”列是否按路由顺序排列。例如,一辆公共汽车从a点出发到E点,在B、C和D点之间停下来。这些停下来的顺序与1234相同。“顺序”列用于管理特定行程的停车顺序。因此,如果有人想从B点到C点,则查询还需要检查“订单”列是否为巴士/渡轮路线的正确顺序。谢谢,但我需要的是仅获取港口按出发港和目的港id顺序排列的路线。例如,如果我将港口id 5作为出发港,将港口id 8作为到达港港口。我只需要得到这些端口按顺序排列的路由。谢谢