Laravel наблюдатель не запускает условие - PullRequest
1 голос
/ 22 февраля 2020

Я изучаю Laravel и создал базовый блог c. Теперь я пытаюсь создать что-то похожее на автоблог, где сообщения меняют статус на основе start_date или end_date. Итак, я создал таблицу enum в своей миграции со статусами, которые мне нужно использовать. Прямо сейчас я пытаюсь изменить статус сообщения на Предстоящее, если дата и время больше, чем сегодня, но мне не повезло. Первоначально я создал событие и поместил приведенный ниже код в слушатель, но работает (или не работает) так же, как в наблюдателе. Я читал, что было бы лучше в наблюдателе, если будет несколько событий.

Поток будет, когда сообщение будет создано, проверьте start_date и измените статус, если дата больше, чем сегодня. Приведенный ниже код изменяет статус на Предстоящий, если я изменяю его на создание, а не на создание, но он все равно не учитывает start_date, поскольку добавляет его к каждому сообщению, независимо от start_date. Я пытался использовать оператор if, но я продолжал застрять. Что я пропускаю или делаю неправильно?

В конце концов, моя цель - чтобы сообщения автоматически меняли статус без каких-либо действий, инициированных пользователем. Возможно, я мог бы использовать Laravel очереди для этого, но я еще не дошел до этого. На данный момент я пытаюсь обойти это.

 <?php

 namespace App\Observers;

 use App\Models\Post;
 use Carbon\Carbon;

 class PostObserver
  {
   public function created(Post $post)
    {

     $post = Post::whereDate('start_date', '>', Carbon::now()->toDateString(){

     $post->post_status = 1  // 1 = Upcoming status
    });
  }
}

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Получилось так, вроде сочетания двух ответов, за что я благодарен:

if (Carbon::parse($post->start_date)->greaterThan(Carbon::now()))
   {
    $post->post_status = 1;
   }
0 голосов
/ 22 февраля 2020

Использовать метод creating

<?php

namespace App\Observers;

use App\Models\Post;
use Carbon\Carbon;

class PostObserver
{
    public function creating(Post $post)
    {
        if ($post->start_date->greaterThan(Carbon::now())) {
            $post->post_status = 1;
        }
    }
}

Метод создания будет вызван до того, как сообщение будет сохранено в базе данных. В этом случае вы делаете проверку, и только в том случае, если start_date больше текущей отметки времени, post_status получит значение 1. Если вам нужно, вы можете установить блок else, где вы даете значение 0 для статуса публикации, если это не значение по умолчанию для БД или если что-то подобное нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...