Laravel雄辩的GroupBy抛出SQL错误

时间:2019-05-05 10:12:38

标签: php laravel laravel-5 eloquent laravel-query-builder

当我手动运行下面的SQL时,我得到的预期结果没有错误

select * from `crawl_results` 
    where `user_id` = 1 and `website_id` = 1 
    and `item_state` != 'OK' group by `destination_url` 
    limit 30 offset 0

但是,当我在Eloquent中运行它时...

self::where('user_id', Auth::id())
    ->where('website_id', $scanID)
    ->where('item_state', '!=' , 'OK')
    ->groupby('destination_url')->paginate(30)

它会产生此错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1055   'link_checker.crawl_results.id'不在GROUP BY中(SQL:select * from   crawl_results,其中user_id = 1和website_id = 1且   item_state!=按destination_url限制30偏移0分组)

不确定抽象背后会发生什么以产生该错误?

2 个答案:

答案 0 :(得分:1)

您应该转到 config \ database.php ,并将 strict 更改为 false

'mysql' => [
   ...
   'strict' => false,
   ...
 ]

答案 1 :(得分:1)

将查询更改为查询构建器查询

DB::table('crawl_results')->where('user_id', Auth::id())->where('website_id', $scanID)->where('item_state', '!=' , 'OK')->groupby('destination_url')->paginate(30);

应该工作正常。

documentation中,提到了GROUP BY无法在分页中有效执行

  

当前,使用groupBy语句的分页操作无法   由Laravel有效执行。如果您需要使用groupBy   分页结果集,建议您查询数据库   并手动创建一个分页器。