【发布时间】: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->start_date) > Carbon::now() { $post->post_status = 1 }。也尝试创建而不是创建 -
这个结果是一样的,即使日期小于现在它也会添加状态,也必须使用->toDateString()
标签: laravel