Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте, не получается сделать проверку. В БД записана дата с помощью Carbon::now(), нужно сделать проверку, прошло ли 30 минут с времени записанного в БД. Думал достать значение с БД, прибавить 30 минут и сравнить с текущем, но как реализовать не понимаю. Прошу помощи, заранее спасибо!
Не в сети
Если тебе один объект нужно проверить, то достаешь его и делаешь что-то вроде:
if ($model->created_at->lt(Carbon::now()->subMinutes(30)))
Если нужно вытащить все записи, то:
->where('created_at', '<', Carbon::now()->subMinutes(30))
Изменено AlexeyMezenin (28.07.2017 17:12:42)
Не в сети
Method lt does not exist.
Не в сети
На будущее, чтобы не играть в догадки, нужно предоставить больше информации.
Если у тебя не created_at, то тебе нужно добавить поле в массив $dates в модели:
protected $dates = ['your_field'];
Тогда это поле автоматически будет преобразовано в объект Carbon.
Или можно делать проебразование вручную:
Carbon::parse($model->your_field)->lt(Carbon::now()->subMinutes(30))
Не в сети
protected $dates = ['your_field'];
Это само собой я сделал.
Не в сети
Не в сети
Что показывает dd($model->your_field)?
Collection {#244 ▼
#items: array:1 [▼
0 => "2017-07-28 11:09:31"
]
}
Не в сети
Покажи свой запрос в БД и другой код. У тебя здесь коллекция со строкой вместо Carbon объекта.
Не в сети
Покажи свой запрос в БД и другой код. У тебя здесь коллекция со строкой вместо Carbon объекта.
Здесь записываю время:
User::where('vk_id', $this->user->vk_id)->update([
'money' => $this->user->money+$record->reward,
'is_use_promo' => Carbon::now(),
]);
Так получаю
$result = = User::where('vk_id', $this->user->vk_id)->pluck('is_use_promo');
Изменено LesoRub (29.07.2017 14:55:45)
Не в сети
pluck() возвращает "массивовидную" коллекцию. Если тебе один пользователь нужен, то доставай объект:
$result = = User::where('vk_id', $this->user->vk_id)->first();
Тогда, если $dates в модели User содержит is_use_promo, то $result->is_use_promo вернет тебе Carbon объект.
PS: Еще похоже, что $this->user уже содержит объект пользователя. Если это так, тогда не нужно создавать новый запрос в БД.
Изменено AlexeyMezenin (29.07.2017 15:11:43)
Не в сети
$result = = User::where('vk_id', $this->user->vk_id)->first();
Большое спасибо за помощь!
Только сейчас нашел внятную документацию по Carbon.
И не sub а add использовал, так как для проверки нужно прибавить к времени в БД и сравнить с текущим
$result = $testtime->is_use_promo->addMinutes(30)->lt(Carbon::now());
Не в сети
Если тебе один
Еще раз большое спасибо за помощь. Еще вопрос по планировщику, задам здесь чтобы новую тему не создавать.
Cron запись сделал, планировщик в schedule() сделал (Добавление запись в БД). Выполняю php artisan schedule:run, всё сработало, запись в БД есть.
Как сделать так, чтобы он сам добавлял эту запись, каждую минуту?
Добавил после
$schedule->call(function () {..})->everyMinute();
Но не работает
Не в сети
Cron запись сделал
Как ты ее "сделал"?
Надо php artisan schedule:run "повесить" в крон с запуском каждую минуту - https://laravel.ru/docs/v5/scheduling#запуск
Если ручной запуск php artisan schedule:run - приводит к нужному результату, а по крону - не работает, значит запись в кроне некорректная, либо демон крона (crond) - не работает.
Изменено covobo (31.07.2017 11:51:53)
Не в сети
Как ты ее "сделал"?
crontab -e
* * * * * php /path/to/artisan schedule:run >>/dev/null 2>&1
Не в сети
Мне неизвестна твоя операционная система, поэтому тебе придется немного погуглить.
Я предполагаю, что в крон логах должны быть ошибки.
Попробуй найти логи крона в твоей ОС.
На это две причины:
1) Скорее всего необходимо указать полный путь до исполняемого файла php (обычно - /usr/bin/php)
2) Тебя не смутил путь до проекта? Вместо "/path/to/artisan" - необходимо указать полный (абсолютный, т.е. от корня файловой системы) путь до файла artisan твоего проекта.
Примерно запись должна выглядеть так:
* * * * * /usr/bin/php /var/www/mysite.ru/artisan schedule:run >>/dev/null 2>&1
И убедись, что сервис (демон) crond вообще активен.
Например в CentOS я бы проверил это так - systemctl status crond.
Изменено covobo (31.07.2017 12:21:53)
Не в сети
2)
Всё завелось. Спасибо.
Не в сети
Страницы 1