php – 如何在Laravel 5中的嵌套查询中使用GroupBy?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何在Laravel 5中的嵌套查询中使用GroupBy?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1534字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何在Laravel 5中的嵌套查询中使用GroupBy?](/upload/InfoBanner/zyjiaocheng/789/1a646d969ff74c9bb5f6186d0c5609ac.jpg)
我在数据库中有四个表,即包裹,固定装置,交易和固定装置交易.
以下是表结构详细信息:
Packages: id, title
Fixtures: id, package_id, name
Deals: id, discound, description
Fixtures_Deal: id, fixture_id, deal_id, price
我需要获得包裹清单以及每个包裹的每个固定装置提供的最低交易价格.
这是我在phpMyAdmin或SQLYog中运行的mysql查询,它运行完美,但在Laravel中它给了我“p.title’不在GROUP BY中”错误.
SELECT
p.title AS package_title,
tbl_min_value.min_price AS min_price
FROM
(SELECT
fixture_id,
MIN(deal_price) AS min_price
FROM
fixture_deal
GROUP BY fixture_id) AS tbl_min_value
JOIN fixtures AS f
ON f.id = tbl_min_value.fixture_id
RIGHT JOIN packages AS p
ON f.package_id = p.id
GROUP BY p.id
顺便说一句,我试图通过在模型中使用以下方法来实现它:
return DB::statement('SELECT
p.title AS package_title,
tbl_min_value.min_price AS min_price
FROM
(SELECT
fixture_id,
MIN(deal_price) AS min_price
FROM
fixture_deal
GROUP BY fixture_id) AS tbl_min_value
JOIN fixtures AS f
ON f.id = tbl_min_value.fixture_id
RIGHT JOIN packages AS p
ON f.package_id = p.id
GROUP BY p.id');
解决方法:
我通过使用Eloquent Collection的mapWithKeys方法找到了另一种方法.
https://laravel.com/docs/5.3/collections#method-mapwithkeys
所以我分别获取了两个查询的数据,并将带有键的集合映射到一个集合对象中.
示例代码:
$packages = Package::getPackages();
$deal_min_price = Deal::getMinimumPrice();
$packages_with_price = $packages->mapWithKeys(function ($packages) use ($deal_min_price) {
return $packages['price'] => $deal_min_price['min_price'];
});
你可以在mapWithKey的闭包中使用foreach循环.
内容总结
以上是互联网集市为您收集整理的php – 如何在Laravel 5中的嵌套查询中使用GroupBy?全部内容,希望文章能够帮你解决php – 如何在Laravel 5中的嵌套查询中使用GroupBy?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。