Laravel / Eloquent和比较日期

时间:2013-01-15 20:36:34

标签: laravel eloquent

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

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

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

5 个答案:

答案 0 :(得分:10)

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

这样的事情怎么样:

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();

我把>=放在那里因为你说“一天或更少”,所以他们的时间戳必须晚于昨天。

答案 1 :(得分:3)

可替换地,

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

ModelName::where( 'timestamp', '>=', Carbon::now() )->get();

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

答案 2 :(得分:2)

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();

答案 3 :(得分:0)

您还可以使用以下方法执行原始查询:

$results = DB::query( 'query' );

您只在结果var

中没有返回模型对象

答案 4 :(得分:0)

您还可以使用whereDate()whereDay()whereMonth()whereYear()。在这种情况下,可以使用whereDate(),使用Carbon的简易日期函数:

return MainContact::whereDate('dateField', '<', Carbon::now()->subDay())->get();