将 SQL 转换为 Laravel 查询生成器错误 - 需要专家级别
Posted
技术标签:
【中文标题】将 SQL 转换为 Laravel 查询生成器错误 - 需要专家级别【英文标题】:Converting SQL to Laravel Query Builder Error - Expert Level Required 【发布时间】:2021-04-10 01:53:32 【问题描述】:我在 PostgreSQL 中编写的 SQL 查询
SELECT date_trunc('day', created_at) AS hour_stamp,
(extract(hour FROM created_at)::int / 60) AS min_slot, count(*),
max(e4) as kwh
FROM energydata_1001
WHERE api_key_value= 'YaB8JCcE'
AND date(created_at) >= '2020-11-30 23:59:59'
AND date(created_at) <= '2020-12-16 00:00:00'
GROUP BY 1, 2
ORDER BY 1, 2;
我已经在 Laravel Query Builder 中编写了这个查询
$rnd = DB::table('energydata_1001')
-> select (DB::raw("date_trunc('day',created_at) AS hour_stamp",
'(extract(hour FROM created_at)::int / 60) AS min_slot'),
DB::raw('count(*)'),
DB::raw('max(e4) as kwh'))
->where ('api_key_value', '=', 'YaB8JCcE')
->where ('created_at', '>=', '2020-11-30 23:59:59')
->where ('created_at', '<=', '2020-12-29 00:00:00')
->groupBy('1','2')
->orderByRaw('1','2')
->get();
但是我在运行这段代码时收到了这样的错误。
当我在我的 PostgreSQL 中运行此查询时,它可以工作并显示数据。
【问题讨论】:
使用列名而不是列号。下次,请在您的帖子中发布完整的错误消息,而不是在其他网站上的图片中。 旁注:DB::raw
只需要 1 个参数
【参考方案1】:
试试这个:
$rnd = DB::table('energydata_1001')->select(DB::raw('DATE_TRUNC(\'day\', created_at) AS hour_stamp'));
/* select statements */
$rnd = $rnd->addSelect(DB::raw('(EXTRACT(hour FROM created_at)::int / 60) AS min_slot'));
$rnd = $rnd->addSelect(DB::raw('COUNT(*)'));
$rnd = $rnd->addSelect(DB::raw('MAX(e4) AS kwh'));
/* where clause */
$rnd = $rnd->where('api_key_value', 'YaB8JCcE');
$rnd = $rnd->where('created_at', '>=', '2020-11-30 23:59:59');
$rnd = $rnd->where('created_at', '<=', '2020-12-29 00:00:00');
$rnd = $rnd->groupBy(1, 2);
$rnd = $rnd->orderBy(1);
$rnd = $rnd->orderBy(2);
$rnd = $rnd->get();
【讨论】:
以上是关于将 SQL 转换为 Laravel 查询生成器错误 - 需要专家级别的主要内容,如果未能解决你的问题,请参考以下文章
将 PHP SQL 转换为 Laravel 查询构建器 [重复]