Laravel 5.2左连接一对多的唯一行,列最高值

Posted

技术标签:

【中文标题】Laravel 5.2左连接一对多的唯一行,列最高值【英文标题】:Laravel 5.2 left join one to many only row with column of highest value 【发布时间】:2016-10-02 15:35:46 【问题描述】:

我正在尝试在一对多关系上使用 eloquent 进行左连接。我只想获取 sort_order 列中值最高的行。

到目前为止,我的查询如下所示:

Package::select('packages.*')
        ->leftJoin('package_routes', 'package_routes.package_id', '=', 'packages.id')
        ->leftJoin('package_route_items', function($join)
            $join->on('package_route_items.package_route_id', '=', 'package_routes.id')
                ->where(???);
        )->...//do more stuff to query here

如果我什至应该使用 where 子句的话,我就卡在 where 子句上。

【问题讨论】:

请提供您的表格定义,因为您的问题不清楚您需要哪个表格的最高行以及哪个表格有sort_order 【参考方案1】:

由于我不知道我将尝试简化条件的所有查询(您可能需要调整列名和语法

在控制器/模型的开头添加use DB;

$data = DB::table('packages')
->select('packages.*, package_route_items.company_id, package_routes.company_id')
    ->join('package_routes', 'package_routes.package_id', '=', 'packages.id')
    ->join('package_route_items.package_route_id', '=', 'package_routes.id')
    ->orderBy('packages.value_column', 'DESC')->first();

这就是我到目前为止从您的描述中了解到的。它没有经过测试,但我认为它应该可以与可能的小编辑一起使用。

与您类似的问题是here 和here(希望它比我的回答更能帮助您)。

【讨论】:

Call to undefined method Illuminate\Database\Query\JoinClause::orderBy() 不幸的是 抱歉,我还编辑了我的问题以明确我的意图。我需要继续向查询添加连接,然后最终按其他方式排序。很抱歉造成混乱! 我现在有点困惑,您能否详细说明一下表格和所需的输出或者一些信息,以便我可以帮助您进行正确的查询? 当然,我最初是在创建一个雄辩的查询,但现在我需要能够以公司名称订购整个事情。现在公司本身是package_route_items 中的外键,我需要获取列表中的最后一个package_route_items.company_id 才能看到包裹的最终目的地。所以架构是 Packages > 有一个 PackageRoute > 有很多 PackageRouteItems > 有一个 company_id 我还需要在 PackageRoute(起点)上获取另一个 company_id 以及来自 Package 的其他一些元数据。 除此之外,我首先像您在问题中看到的那样进行连接,然后在正确订购它们后,我将使用 ->with(...relationships here...) 为模型补水

以上是关于Laravel 5.2左连接一对多的唯一行,列最高值的主要内容,如果未能解决你的问题,请参考以下文章

134 MySQL多表查询

具有多个左连接的 SQL 重复行

有没有办法检查 laravel 5.2 中的几个输入是不是唯一?

将一对多关系显示为 2 列 - 1 个唯一行(ID 和逗号分隔列表)

世界上使用率最高的PHP Laravel 5.2框架

Laravel 在连接结果上不同,在查询生成器中不起作用