我正在尝试根据用户年龄返回分页结果。当我将selectRaw()
与paginate()
结合使用时,Laravel会抛出错误。
这是错误:
Illuminate \ Database \ QueryException:SQLSTATE [42S22]:找不到列:1054“具有子句”中的未知列“ age_months”(SQL:从
ads
中选择count(*)作为age_months <= 3的聚合)
代码如下:
Ad::selectRaw('TIMESTAMPDIFF(YEAR, DATE(ads.birth_date), CURDATE()) AS age_months')
->having(\DB::raw('age_months'), '<=', $request->max_age_months)
->paginate();
如您所见,count(*)
将覆盖selectRaw()
,使其过时。我尝试将paginate()
替换为get()
,它可以正常工作,并产生以下查询:
从
的age_months选择TIMESTAMPDIFF(YEAR,DATE(ads.birth_date),CURDATE())AS age_months。ads
中使用age_months <=?
这是错误还是我做错了什么?
答案 0 :(得分:0)
原来,我使事情变得更加复杂。我只用Laravel的whereDate()
就解决了。
Ad::whereDate('birth_date', '>=', now()->subMonths($request->max_age_months))
->paginate();