2013-01-15 36 views
8

我想返回我的数据库表中一天或更少的所有行。我正在使用Laravel 4.这是我尝试的:Laravel /口才和比较日期

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

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

回答

9

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

怎么是这样的:

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

我把>=在那里,因为你说的“一天或更短老”,所以他们必须有时间戳比昨天更高版本。

+0

是的,我不得不调整他的MySQL。 – sehummel

+2

我做了MainContact :: where('timestamp','>',DB :: raw('NOW() - INTERVAL'。$ interval。'DAY') - > get();'然后在间隔中传递我想要 – sehummel

+2

你也可以使用'strtotime(“ - 1 day”)',像这样: 'MainContact :: where('timestamp','>'strtotime(“ - {$ interval} day”)) - > get();' –

0

您也可以通过做一个原始查询:

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

你只能做不是模型对象回到结果VAR

+0

啊,这是我现在工作的方法。 – sehummel

+0

我曾希望有更好的方法。 – sehummel

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

我最终做了一件非常相似的事情。 – sehummel

0

你也可以使用whereDate()whereDay()whereMonth()whereYear()。在这种情况下,whereDate()可以作为这样的,与碳的易于日期函数:

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