【问题标题】:Laravel 5 query builder and NOW() for date comparisonLaravel 5 查询生成器和 NOW() 用于日期比较
【发布时间】:2017-03-01 15:45:56
【问题描述】:

我的数据库 (MySQL) 有一个created_at 的时间戳字段。

我有两个条目,时间戳如下:

  • 2017-12-12 18:25:00
  • 2016-10-02 18:00:00

今天是 2016 年 10 月 19 日(供将来参考)。如果我使用以下查询,我不会得到任何结果:

    $job = $jobs->where('closing_at', '>=', 'NOW()')
            ->orderBy($sorter[0], $sorter[1])->paginate(24);

如果我硬编码日期,我会得到正确的结果,只是一个未来的日期:

    $job = $jobs->where('closing_at', '>=', "2016-10-19 00:00:00")
            ->orderBy($sorter[0], $sorter[1])->paginate(24);

我假设我的错误是在使用 Eloquent 查询构建器时使用 NOW(),但我无法弄清楚使用它的正确方法。

【问题讨论】:

  • DB::raw 或 whereRaw 应该可以帮助你laravel.com/docs/5.3/queries#raw-expressions
  • 我猜你需要 \Carbon::now() 而不是 NOW()
  • 使用日期("Y-m-d H:i:s") 或 \Carbon::now()
  • 嘿,我也想知道同样的事情,原来你可以使用 \DB::raw('now()')

标签: php mysql laravel-5


【解决方案1】:

Eloquent Query builder 不接受那些特定的 SQL 函数,但由于它是在您的 PHP 中完成的,您可以轻松地使用出色的 Carbon 类:http://carbon.nesbot.com/docs/

use Carbon\Carbon;

然后,

$job = $jobs->where('closing_at', '>=', Carbon::now())
        ->orderBy($sorter[0], $sorter[1])->paginate(24);

这应该可以解决问题。

还有一个 whereDate() 雄辩的方法:https://laravel.com/docs/5.3/queries#where-clauses

【讨论】:

  • 就是这样。 Eloquent 不接受基本的 SQL 函数对我来说没有意义,但它可以工作。谢谢
  • 这适用于 DB:: object : laravel.com/docs/5.3/queries 但不适用于 eloquent 调用的模式,因为它首先是“由 PHP 管理的”。
猜你喜欢
  • 2015-12-24
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2021-06-12
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多