在Laravel中将selectRaw和paginate结合起来

时间:2019-06-14 09:40:10

标签: laravel

我正在尝试根据用户年龄返回分页结果。当我将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(),它可以正常工作,并产生以下查询:

  

ads中使用age_months <=?

的age_months选择TIMESTAMPDIFF(YEAR,DATE(ads.birth_date),CURDATE())AS age_months。

这是错误还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

原来,我使事情变得更加复杂。我只用Laravel的whereDate()就解决了。

Ad::whereDate('birth_date', '>=', now()->subMonths($request->max_age_months))
    ->paginate();