Laravel/Eloquent和比较日期

seh*_*mel 8 laravel eloquent

我想返回数据库表中一天或更少旧的所有行.我正在使用Laravel 4.这就是我尝试过的:

$date = date('Y-m-d H:i:s');
return MainContact::where(DATEDIFF('timestamp', $date), '<=', 1)->get();
Run Code Online (Sandbox Code Playgroud)

这不起作用.我阅读了文档,似乎你不能通过Laravel MySQL函数. timestamp是一个日期时间字段.如何在Laravel 4中比较这些日期?

dua*_*ty_ 10

user1977808给你的答案并不好,因为MySQL不能在timestamp列上使用索引,因为它必须为每一行计算DATE_SUB函数的输出.避免这样的查询,他们每次都必须处理整个表格!

这样的事情怎么样:

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
Run Code Online (Sandbox Code Playgroud)

我把它>=放在那里因为你说"一天或更少",所以他们必须有比昨天晚的时间戳.

  • 我做了'MainContact :: where('timestamp','>',DB :: raw('NOW() - INTERVAL'.$ interval.'DAY') - > get();`然后在间隔I中传递通缉. (4认同)
  • 您也可以使用`strtotime(" - 1天")`,如下所示:`MainContact :: where('timestamp','>'strtotime(" - {$ interval} day")) - > get();` (2认同)

afi*_*hmi 8

或者,

您可以使用与 Laravel 捆绑在一起的Carbon API

ModelName::where( 'timestamp', '>=', Carbon::now() )->get();
Run Code Online (Sandbox Code Playgroud)

参考:http : //laravel.com/docs/5.1/eloquent-mutators

  • 他使用的是 Laravel 4 而不是 5。 (2认同)