【问题标题】:Selecting entries whose `date_field < NOW()`选择 `date_field < NOW()` 的条目
【发布时间】:2016-10-03 08:20:59
【问题描述】:

当我尝试运行以下查询时,它什么也不返回:

Item::where(\DB::raw('date_field < NOW()'))->get()

这样做的原因是,is null 被附加到生成的 MySQL 查询中,如下所示:

SELECT * FROM items WHERE date_field < NOW() is null;

为什么is null 部分会附加到上述查询中?

【问题讨论】:

    标签: sql laravel laravel-5 laravel-5.2 query-builder


    【解决方案1】:

    不知道为什么要附加 not null 部分。但我找到了解决方法。 试试这个

    Item::whereNotNull(\DB::raw('date_field < NOW()'))->get()
    

    当然,你也可以使用像Carbon这样的内置功能

    Item::where('date_field', '<', Carbon\Carbon::now())->get()
    

    【讨论】:

    • 感谢您的回答。我想避免使用Carbon::now() 来避免服务器/数据库时间不兼容问题。不过,您的解决方法效果很好
    【解决方案2】:

    SELECT * FROM items WHERE date_field

    【讨论】:

      【解决方案3】:

      这是 Laravel 中的一个已知问题,并已在其GitHub page 上报告。改用whereRaw() 并传递一个字符串:

      Item::whereRaw('date_field < NOW()')->get()
      

      【讨论】:

      • @AlexanderLomia 这是目前四个主题中迄今为止最好的答案。使用这个。
      • 工作就像一个魅力,感谢您提供信息丰富的答案!
      【解决方案4】:

      这样用吧..

      Item::where('date_field','<','NOW()')->get()
      

      【讨论】:

      • 那行不通。 Laravel 需要对 MySQL 函数进行原始查询。
      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 2012-01-22
      • 2017-03-19
      • 2021-04-08
      • 2011-09-30
      • 2021-11-17
      • 2016-05-08
      • 2012-01-01
      相关资源
      最近更新 更多