将 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 查询生成器错误 - 需要专家级别的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 sql 查询转换为 laravel 查询生成器

将 PHP SQL 转换为 Laravel 查询构建器 [重复]

将 mysql 查询转换为 laravel 查询生成器

将原始 SQL 转换为 Laravel 查询构建器

我如何将 SQL 原始查询重写为 Laravel 查询生成器

Laravel 查询生成器不在