我有一个查询,我正在尝试使用 laravel Eloquent 查询构建器来构建。我对 Laravel 比较陌生,我正在寻找可以查询日期和时间的方法。
我的用例:获取过去一小时创建的 MyModel 的子记录。
我的查询:
$childQuery = function($query) {
$timezone = new Timezone('UTC');
// whereDate only compares a Date value
// whereTime only compares the Time value
$query->whereDate('custom_timestamp'
,'>='
, Carbon::now($timezone)->addSeconds(-3600));
};
MyModel::with(['myChildModels' => $childQuery])->find($myModelId);
如何执行时间戳比较? 我确定我只是遗漏了一些简单的东西,但令人惊讶的是我在文档中找不到一个引用来比较时间戳。
最佳答案
custom_timestamp
字段的数据类型是什么?您是在说 UNIX 时间戳(整数)还是例如MySQL 时间戳(字符串'2019-06-04 23:40:07')?
如果 custom_timestamp
是整数数据类型,那么您的查询将是
$childQuery = function($query) {
$query->where('custom_timestamp','>=', time()-3600); // time() is always UTC
};
MyModel::with(['myChildModels' => $childQuery])->find($myModelId);
如果 custom_timestamp
是日期时间数据类型,比如 MySQL 时间戳,您的查询将类似于
$childQuery = function($query) {
$query->where('custom_timestamp','>=', now('UTC')->subHour());
};
MyModel::with(['myChildModels' => $childQuery])->find($myModelId);
这是 MySQL 语法——您的数据库语法可能会有所不同。最主要的是您不需要使用 Eloquent 的日期辅助方法来处理日期。通常不这样做会更容易。
另请注意全局 now()
帮助器,您可以将“UTC”作为字符串直接传递。 Laravel 利用 Carbon 的好处之一。
关于php - Laravel:Eloquent Query Builder 哪里有时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453683/