php - Laravel - 设置published_at属性

标签 php laravel

在我的应用程序中,我有可发布的公告,其中有一个 Announcement 模型,以下是架构:

Schema::create('announcements', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('message');
    $table->text('message_details');
    $table->string('author');
    $table->string('status');
    $table->timestamp('published_at')->nullable();
    $table->timestamps();
});

我还有一个 AnnouncementObserver 来观察模型变化。

我认为要设置 published_at 我可以使用 updated 事件,如下所示:

/**
 * Handle the announcement "updated" event.
 *
 * @param  \App\Announcement  $announcement
 * @return void
 */
public function updated(Announcement $announcement)
{
    $changes = $announcement->getChanges();

    if ($changes['status'] === 'published') {
        $announcement->published_at = Carbon::now();
    }

    Log::notice("An announcement was updated: {$announcement->title} by: " . auth()->user()->full_name);
}

但是,这并未更新published_at。我在更新时没有这样做,因为我找不到方法来确定该值是否实际上已更改。

我在这里过于复杂化了吗?

来自反馈

/**
 * Handle the announcement "creating" event.
 *
 * @param  \App\Article  $announcement
 * @return void
 */
public function updating(Announcement $announcement)
{
    if ($announcement->isDirty(['status'])) {
        $new_status = $announcement->getDirty('status');

        if ($new_status == 'published') {
            dd('weng');
        }
    }
}

但是这不太有效...

根据给出的答案,这就是我最终得到的结果......

/**
 * Handle the announcement "creating" event.
 *
 * @param  \App\Announcement  $announcement
 * @return void
 */
public function updating(Announcement $announcement)
{
    // Set published_at when published
    if ($announcement->isDirty('status') && $announcement->status === 'published') {
        $announcement->published_at = now();
    }

    // Set published_at to null when unpublished
    if ($announcement->isDirty('status') && $announcement->status !== 'published') {
        $announcement->published_at = null;
    }
}

因此,如果发布状态发生更改,published_at 将变为 NULL

最佳答案

您可以做的是将其更改回更新,并使用$announcement->isDirty()检查公告是否已更改。如果对象的一个​​或多个属性自数据库检索以来发生了更改,则此方法将返回 true。

关于php - Laravel - 设置published_at属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254552/

相关文章:

php - mpdf addPage 创建空白页

linux - Apache 不会监听除端口 80 以外的其他端口

laravel - 在 Laravel 验证方法中使用单例进行单元测试

php - 如何在 laravel 5.4.10 中添加自定义类

php - 不尊重碳语言环境?

php - Laravel Eloquent 查询构建选择最小值

php - mssql > php > mysql 之间的日期转换/提取问题

javascript - POST 请求中的 500

php - Laravel 4 不返回一对多

php - 在 php put 中使用 orderby 使其降序....如何?