【问题标题】:Combining selectRaw and paginate in Laravel在 Laravel 中结合 selectRaw 和 paginate
【发布时间】:2019-06-14 17:53:02
【问题描述】:

我正在尝试根据用户的年龄返回分页结果。当我将selectRaw()paginate() 结合使用时,Laravel 会抛出错误。

这是错误:

Illuminate\Database\QueryException : SQLSTATE[42S22]: Column not found: 1054 Unknown column 'age_months' in 'having clause' (SQL: select count(*) as aggregate from ads with age_months

代码如下:

Ad::selectRaw('TIMESTAMPDIFF(YEAR, DATE(ads.birth_date), CURDATE()) AS age_months')
    ->having(\DB::raw('age_months'), '<=', $request->max_age_months)
    ->paginate();

如您所见,count(*) 覆盖了selectRaw(),使其已过时。我尝试用get() 替换paginate(),它可以工作,并产生这个查询:

选择 TIMESTAMPDIFF(YEAR, DATE(ads.birth_date), CURDATE()) AS age_months from ads 有 age_months

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

【问题讨论】:

  • 告诉我你的逻辑,我会将其转换为 Laravel 查询并进行分页

标签: laravel


【解决方案1】:

原来我让事情变得更复杂了。我通过使用 Laravel 的 whereDate() 解决了它。

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

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2019-05-16
    • 2020-11-28
    • 2014-09-07
    • 2021-10-24
    • 1970-01-01
    • 2020-08-24
    • 2023-03-21
    • 2021-12-04
    相关资源
    最近更新 更多