Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.07.2017 15:50:30

Проверка времени (Carbon)

Здравствуйте, не получается сделать проверку. В БД записана дата с помощью Carbon::now(), нужно сделать проверку, прошло ли 30 минут с времени записанного в БД. Думал достать значение с БД, прибавить 30 минут и сравнить с текущем, но как реализовать не понимаю. Прошу помощи, заранее спасибо!

Не в сети

#2 28.07.2017 17:11:33

Re: Проверка времени (Carbon)

Если тебе один объект нужно проверить, то достаешь его и делаешь что-то вроде:

if ($model->created_at->lt(Carbon::now()->subMinutes(30)))

Если нужно вытащить все записи, то:

->where('created_at', '<', Carbon::now()->subMinutes(30))

Изменено AlexeyMezenin (28.07.2017 17:12:42)

Не в сети

#3 29.07.2017 11:11:09

Re: Проверка времени (Carbon)

Method lt does not exist.

Не в сети

#4 29.07.2017 12:03:14

Re: Проверка времени (Carbon)

На будущее, чтобы не играть в догадки, нужно предоставить больше информации.

Если у тебя не created_at, то тебе нужно добавить поле в массив $dates в модели:

protected $dates = ['your_field'];

Тогда это поле автоматически будет преобразовано в объект Carbon.

Или можно делать проебразование вручную:

Carbon::parse($model->your_field)->lt(Carbon::now()->subMinutes(30))

Не в сети

#5 29.07.2017 12:34:54

Re: Проверка времени (Carbon)

protected $dates = ['your_field'];

Это само собой я сделал.

Не в сети

#6 29.07.2017 13:03:15

Re: Проверка времени (Carbon)

Что показывает dd($model->your_field)?

Не в сети

#7 29.07.2017 13:20:15

Re: Проверка времени (Carbon)

Что показывает dd($model->your_field)?

Collection {#244 ▼
  #items: array:1 [▼
    0 => "2017-07-28 11:09:31"
  ]
}

Не в сети

#8 29.07.2017 13:31:50

Re: Проверка времени (Carbon)

Покажи свой запрос в БД и другой код. У тебя здесь коллекция со строкой вместо Carbon объекта.

Не в сети

#9 29.07.2017 14:54:23

Re: Проверка времени (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)

Не в сети

#10 29.07.2017 15:07:20

Re: Проверка времени (Carbon)

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)

Не в сети

#11 29.07.2017 17:45:12

Re: Проверка времени (Carbon)

$result = = User::where('vk_id', $this->user->vk_id)->first();

Большое спасибо за помощь!
Только сейчас нашел внятную документацию по Carbon.

И не sub а add использовал, так как для проверки нужно прибавить к времени в БД и сравнить с текущим smile

$result = $testtime->is_use_promo->addMinutes(30)->lt(Carbon::now());

Не в сети

#12 31.07.2017 11:46:22

Re: Проверка времени (Carbon)

Если тебе один

Еще раз большое спасибо за помощь. Еще вопрос по планировщику, задам здесь чтобы новую тему не создавать.
Cron запись сделал, планировщик в schedule() сделал (Добавление запись в БД). Выполняю php artisan schedule:run, всё сработало, запись в БД есть.
Как сделать так, чтобы он сам добавлял эту запись, каждую минуту?

Добавил после

$schedule->call(function () {..})->everyMinute();

Но не работает sad

Не в сети

#13 31.07.2017 11:51:16

Re: Проверка времени (Carbon)

Cron запись сделал

Как ты ее "сделал"?

Надо php artisan schedule:run "повесить" в крон с запуском каждую минуту -  https://laravel.ru/docs/v5/scheduling#запуск

Если ручной запуск php artisan schedule:run - приводит к нужному результату, а по крону - не работает, значит запись в кроне некорректная, либо демон крона (crond) - не работает.

Изменено covobo (31.07.2017 11:51:53)

Не в сети

#14 31.07.2017 12:00:36

Re: Проверка времени (Carbon)

Как ты ее "сделал"?

crontab -e
* * * * * php /path/to/artisan schedule:run >>/dev/null 2>&1

Не в сети

#15 31.07.2017 12:20:22

Re: Проверка времени (Carbon)

Мне неизвестна твоя операционная система, поэтому тебе придется немного погуглить.
Я предполагаю, что в крон логах должны быть ошибки.
Попробуй найти логи крона в твоей ОС.
На это две причины:
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)

Не в сети

#16 31.07.2017 13:09:32

Re: Проверка времени (Carbon)

smile

2)

Всё завелось. Спасибо.

Не в сети

Подвал раздела