gpt4 book ai didi

mysql - 复杂的 Eloquent SQL

转载 作者:行者123 更新时间:2023-11-29 18:20:16 27 4
gpt4 key购买 nike

我尝试在 Laravel 5.5 中运行以下查询:

select `colours`.`id` AS `id`
,`colours`.`description` AS `description`
,`vehicle_colour_and_trims`.`colour_id` AS `colour_id`
,`colours`.`code` AS `code`
,`vehicle_options`.`basic_price` AS `basic_price`
,`vehicle_options`.`mrp` AS `mrp`
,`vehicle_options`.`vat` AS `vat`
from ((`vehicle_colour_and_trims`
join `colours`
on ((`vehicle_colour_and_trims`.`colour_id` = `colours`.`id`)))
join `vehicle_options`
on ((`colours`.`option_id` = `vehicle_options`.`option_id`)))
WHERE vehicle_colour_and_trims.vehicle_id = 116922
group by `colours`.`code`
order by `colours`.`description`

这超出了 Eloquent 的范围吗?

最佳答案

如果你想执行复杂的查询,Laravel 提供了查询构建器工具,你可以使用 DB Facade 上的 table 方法来开始查询。

在您的 Controller 中,您必须添加以下行才能使用数据库外观:

use Illuminate\Support\Facades\DB;

您要执行的查询将如下构建:

    $query = DB::table('vehicle_colour_and_trims')
->join('colours', 'vehicle_colour_and_trims.colour_id', '=','colours.id')
->join('vehicle_options', 'colours.option_id', '=','vehicle_options.option_id')
->select('colours.id AS id',
'colours.description AS description',
'vehicle_colour_and_trims.colour_id AS colour_id',
'colours.code AS code',
'vehicle_options.basic_price AS basic_price',
'vehicle_options.mrp AS mrp',
'vehicle_options.vat AS vat')
->where('vehicle_colour_and_trims.vehicle_id','=', 116922)
->groupBy('colours.code')
->orderBy('colours.description', 'desc')
->get();

您可以在 laravel 文档中阅读有关查询构建器的更多信息

https://laravel.com/docs/5.5/queries

使用此查询会出现 SQLSTATE [42000] 错误,因为在 mysql 中 ** sql_mode = ONLY_FULL_GROUP_BY ** 默认启用,这意味着 MySQL 拒绝选择列表、HAVING 条件或 ORDER BY 引用非聚合的查询未在 GROUP BY 子句中命名或功能上依赖于它们的列。

为了将列添加到选择列表中,而不必将它们添加到 GROUP_BY 子句中,您必须对每个不必出现的列使用函数 ANY_VALUE()在子句中,尝试以下操作:

$query = DB::table('vehicle_colour_and_trims')
->join('colours', 'vehicle_colour_and_trims.colour_id', '=','colours.id')
->join('vehicle_options', 'colours.option_id', '=','vehicle_options.option_id')
->select(DB::raw('ANY_VALUE(colours.id) AS id,
ANY_VALUE(colours.description) AS description,
ANY_VALUE(vehicle_colour_and_trims.colour_id) AS colour_id,
colours.code AS code,
ANY_VALUE(vehicle_options.basic_price) AS basic_price,
ANY_VALUE(vehicle_options.mrp) AS mrp,
ANY_VALUE(vehicle_options.vat) AS vat'))
->where('vehicle_colour_and_trims.vehicle_id','=', 116922)
->groupBy('colours.code')
->orderBy('colours.description', 'desc')
->get();

DB::raw() 函数允许您创建原始表达式

更多信息:

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

关于mysql - 复杂的 Eloquent SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com