You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:将给定MySQL语句转换的Query Builder是否正确?

你的Query Builder代码和原MySQL语句是否匹配?

先把两段代码摆出来对比更清楚:

原MySQL语句:

SELECT YEAR(`UNIT`.sold_date) AS SOLD_YEAR 
FROM pams_unit AS `UNIT` 
WHERE `UNIT`.status_id=3 
  AND YEAR(`UNIT`.sold_date)>=2012 
GROUP BY SOLD_YEAR

你写的Query Builder代码:

$year = DB::table('pams_unit')
    ->selectRaw('year(sold_date) as year')
    ->where([
        ['status_id', '=', '3'],
        ['year(sold_date)', '>=', '2012'],
    ])
    ->groupBy('year');

直接说结论:这段Query Builder代码在功能逻辑上完全等价于原MySQL语句,只是有两个小细节的写法差异,完全不影响正确性:

  • 别名命名:原SQL把年份别名设为SOLD_YEAR,你用的是year,但只要selectRaw里的别名和groupBy里的引用一致,就没问题,逻辑上都是按销售年份分组。
  • 表别名:原SQL给pams_unit加了UNIT的别名,你的Query Builder没加,但因为只操作单张表,不会出现字段歧义,所以这个差异不影响查询结果。

另外补充一点:where条件里用year(sold_date)的写法,和原SQL完全一致,虽然这种写法可能无法利用sold_date字段的索引(属于性能优化范畴),但从语法和功能正确性来说,是完全匹配原SQL的。

内容的提问来源于stack exchange,提问作者Ho Wei Kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:34:22