Laravel Eloquent - 将 Mariadb 变量与 HAVING 一起使用

问题描述 投票:0回答:1

我在基于 Mariadb 变量的计算列上通过 HAVING 过滤 Mariadb 查询时遇到问题。

我在 Laravel Elquent 中遇到问题,我运行的查询没有产生任何结果。

我已经找到了查询中令人反感的部分,并尽可能简化了查询作为测试。

在 Laravel 中执行此代码,会产生结果“0”:

    dd(\DB::table('timesheets')->select([
        'timesheets.*',
        DB::raw('(@test := 1) AS test1'),
        DB::raw('@test AS test2'),
    ])->havingRaw('test2 = 1')->count());

但是如果我输出SQL:

    dd(\DB::table('timesheets')->select([
        'timesheets.*',
        DB::raw('(@test := 1) AS test1'),
        DB::raw('@test AS test2'),
    ])->havingRaw('test2 = 1')->toSql());

select timesheets.*, (@test := 1) AS test1, @test AS test2 from timesheets having test2 = 1

并使用 tableplus 直接针对我的 Mariadb 实例运行此查询,我得到了我期望的结果。

如果我将查询更改为:

    dd(\DB::table('timesheets')->select([
        'timesheets.*',
        DB::raw('1 AS test1'),
        DB::raw('1 AS test2'),
    ])->havingRaw('test2 = 1')->count());

然后我得到正确的结果“66503”。

Laravel 中似乎存在一些开销(某处!),它不喜欢 select 语句中的变量,与 MySql 的 HAVING 结合使用,但我的查询严重依赖于此。

我将不胜感激任何帮助,因为我正在用这个把我的头发撕下来!

laravel eloquent mariadb having
1个回答
0
投票

使用这种方法:

dd( \DB::table('timesheets')
    ->select([
        'timesheets.*',
    ])
    ->havingRaw('(SELECT @test := 1) AND (@test = 1)')
    ->count());

© www.soinside.com 2019 - 2024. All rights reserved.