12

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

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

这行不通。我阅读了文档,您似乎无法传递 Laravel MySQL 函数。 timestamp是一个日期时间字段。如何在 Laravel 4 中比较这些日期?

4

5 回答 5

11

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

像这样的东西怎么样:

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

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

于 2013-01-15T22:27:39.880 回答
8

或者,

你可以使用与 Laravel 捆绑的Carbon API 。

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

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

于 2015-10-18T06:08:43.777 回答
2
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get();
于 2013-01-15T22:10:17.780 回答
2

您也可以使用whereDate(),whereDay()和. 在这种情况下,可以使用 Carbon 的简单日期函数:whereMonth()whereYear()whereDate()

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

于 2017-03-13T11:44:30.433 回答
0

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

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

您只是不要将模型对象返回到结果变量中

于 2013-01-15T21:47:27.990 回答