【问题标题】:Laravel observer not triggering conditionLaravel 观察者没有触发条件
【发布时间】:2020-02-22 15:59:37
【问题描述】:

我正在学习 Laravel,并创建了一个基本博客。现在,我正在尝试创建类似于自动博客的内容,其中帖子根据 start_date 或 end_date 更改状态。因此,我在迁移中创建了一个枚举表,其中包含我需要使用的状态。现在,如果日期和时间大于今天,我正在尝试将帖子状态更改为即将发布,但我没有任何运气。最初,我创建了一个事件并将下面的代码放在侦听器中,但其工作(或不工作)的方式与观察者相同。我读到如果有几个事件,观察者会更好。

流程是,当创建帖子时,检查 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
    });
  }
}

【问题讨论】:

  • 您正在注入 post 实例,所以我认为您必须使用它而不是执行新查询来获取 start_date 大于现在的所有帖子。试试if(Carbon::parse($post-&gt;start_date) &gt; Carbon::now() { $post-&gt;post_status = 1 }。也尝试创建而不是创建
  • 这个结果是一样的,即使日期小于现在它也会添加状态,也必须使用->toDateString()

标签: laravel


【解决方案1】:

让它像这样工作,是两种响应的组合,对此我很感激:

if (Carbon::parse($post->start_date)->greaterThan(Carbon::now()))
   {
    $post->post_status = 1;
   }

【讨论】:

    【解决方案2】:

    使用方法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 设置为发布状态,以防它不是数据库默认值或者如果需要这样的东西。

    【讨论】:

    • 无法让这个工作,继续调用字符串上的成员函数greaterThan(),即使使用->toDateString()
    • 尝试使用if (Carbon($post-&gt;start_date)-&gt;greaterThan(Carbon::now())) {/** code */}if (Carbon::createFromFormat('Y-m-d H:i:s', $post-&gt;start_date)-&gt;greaterThan(Carbon::now())) {/** code */},具体取决于您在客户端接受的格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多