Laravel: красноречивый Querybuilder, где Timestamp? - PullRequest
3 голосов
/ 05 июня 2019

У меня есть запрос, который я пытаюсь построить с помощью компоновщика красноречивых запросов laravel. Я относительно новичок в 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);

Как выполнить сравнение с отметкой времени? Я уверен, что мне просто не хватает чего-то простого, но, что удивительно, я не смог найти ни одной ссылки в документах на сравнение временных меток.

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Какой тип данных поля 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 - это тип данных datetime, скажем, отметка времени MySQL, ваш запрос будет выглядеть примерно так:

$childQuery = function($query) {
    $query->where('custom_timestamp','>=', now('UTC')->subHour());
};
MyModel::with(['myChildModels' => $childQuery])->find($myModelId);

Это синтаксис MySQL - ваш синтаксис БД может отличаться. Главное, чтобы не требовалось для использования вспомогательных методов Eloquent для работы с датами. Как правило, проще не делать.

Также обратите внимание на глобальный помощник now() и на то, что вы можете передать «UTC» непосредственно в виде строки. Одно из преимуществ использования Laravel Carbon.

0 голосов
/ 05 июня 2019

Я не могу проверить это прямо сейчас, но я бы подумал, что вы просто хотите, чтобы ваша пользовательская метка времени была больше, чем час назад.

->whereDate('custom_timestamp', '>=', Carbon::now()->subHour())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...