【问题标题】:Wrong results in Laravel eloquent query using date filter使用日期过滤器导致 Laravel 雄辩查询的错误结果
【发布时间】:2019-05-16 21:45:19
【问题描述】:

我必须从日期列大于今天的数据库中提取结果(基本上我需要查看即将发生的事件)。

在现实世界中,我在 MySql 控制台中玩游戏:

select * from searcheable where MATCH (title,description) AGAINST ('rock' IN BOOLEAN MODE) and date > CURDATE() order by date  asc

而且效果很好。

我正在尝试使用 Laravel 以雄辩的方式提取相同的数据,我写道:

$results = Search::search($key)
            ->whereDate("date",">",' CURDATE()')
            ->orderBy("date",'asc')
            ->paginate();

但它返回错误的日期错误的结果。

注意我使用的 search 方法是用于全文。我认为这不是问题。

如果我进行调试并使用 dd($results) 打印 sql,它会返回:

select * from `searcheable` where MATCH (title,description) AGAINST (? IN BOOLEAN MODE) and date(`date`) > ? order by `date` asc

这与我正在处理的起始查询非常相似。

我雄辩的查询出了什么问题?

感谢您的宝贵时间:)

【问题讨论】:

  • 您正在与常量字符串' CURDATE()' 进行比较。请改用DB::raw('CURDATE()')。或者从 PHP 传递当前日期。
  • 或者你可以像->whereDate("date",">",date('Y-m-d'))这样比较

标签: mysql laravel eloquent


【解决方案1】:

这样试试

 ->whereDate("date",">", now());

now() 将返回一个 Carbon DateTime 实例,该实例将自动转换为适当的格式

【讨论】:

  • 当然!我正在等待常规时间:) 它避免太快接受答案
【解决方案2】:

看起来您的错误可能是CURDATE() 格式,您需要确保两个日期的格式相同,对于当前日期,我总是使用$currentdate = Carbon::now();

然后使用此日期进行搜索...

【讨论】:

  • 感谢您的帮助。它使用 date() 而不是 'CURDATE()' 工作。我会检查碳文档...感谢您的建议。
  • 当然这是使用 Carbon 库的另一种方式,类似于直接使用 now(),但使用变量可以访问方法
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多