php - Laravel:Eloquent Query Builder 哪里有时间戳?

标签 php laravel eloquent timestamp

我有一个查询,我正在尝试使用 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/

相关文章:

mysql - 使用 join 和 order by 时的 Laravel 数据库排序问题

php - Linux服务器中的共享目录

php - Laravel - 在数据库的列中显示选定的 ID

reactjs - webpack:SASS 加载器失败 "Module build failed (from ./node_modules/sass-loader/lib/loader.js)"

php - 用多个select语句查询并加入Eloquent

mysql - Eloquent:获取具有唯一列值的记录,带有回退

php - 使用 mySql 和 PHP 进行搜索

php - Android 将 Base64 字符串发布到 PHP

php - XAMPP,PHP : echo adds two spaces to blob read from database

php - 创建新的中间件时,Laravel抛出: “Maximum function nesting level of ' 10 0' reached, aborting!”