【问题标题】:Laravel: Eloquent Querybuilder whereTimestamp?Laravel:Eloquent Query Builder 时间戳在哪里?
【发布时间】:2019-10-20 13:29:51
【问题描述】:

我有一个正在尝试使用 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);

如何执行时间戳比较? 我确定我只是遗漏了一些简单的东西,但令人惊讶的是,我在文档中找不到单个参考来比较时间戳。

【问题讨论】:

    标签: php laravel eloquent timestamp


    【解决方案1】:

    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 语法 - 您的 DB 语法可能会有所不同。主要的是你不需要需要使用 Eloquent 的日期助手方法来处理日期。不这样做通常更容易。

    还要注意全局 now() 助手,并且您可以将 'UTC' 直接作为字符串传递。 Laravel 利用 Carbon 的好处之一。

    【讨论】:

    • 是的 - subHour 是我一直在寻找的,我必须说它没有直观地命名,这对于我迄今为止所见的 laraval 来说是不寻常的。谢谢老哥!
    【解决方案2】:

    我现在无法对此进行测试,但我原以为您只是希望您的自定义时间戳大于一小时前。

    ->whereDate('custom_timestamp', '>=', Carbon::now()->subHour())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多