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左连接一对多的唯一行,列最高值的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法检查 laravel 5.2 中的几个输入是不是唯一?