当我手动运行下面的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分组)
不确定抽象背后会发生什么以产生该错误?
答案 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 分页结果集,建议您查询数据库 并手动创建一个分页器。