雄辩的模型不更新updated_at时间戳

2022-08-30 19:29:14

我使用的是Laravel 5.1。为了简单起见,我有以下代码

迁移:

Schema::create('sitemap_data', function (Blueprint $table) {
    // Primary and foreign keys
    $table->increments('id');
    $table->string('postUrl');
    // Database functions
    $table->timestamps();
});

这是我在其他地方使用的代码

$sitemapData = SitemapData::firstOrNew([
                'postUrl' => $post
            ]);
$sitemapData->save();

现在,根据Laravel文档

同样,updated_at时间戳将自动更新,因此无需手动设置其值

应在表中更新updated_at值。但是,这并没有发生。

它仅在第一个插入时设置,但不在更新时设置。当我手动执行此操作时,如下所示

$sitemapData = SitemapData::firstOrNew([
                    'postUrl' => $post
                ]);
$sitemapData->updated_at = Carbon::now();
$sitemapData->save();

它的工作原理。但是,文档说这应该自动发生,那么这里有什么问题呢?

我已经在stackoverflow上搜索了一些网站来解决这个问题,但是我找到了Laravel 3或4.1,4.2等的网站。

我该如何正确地做到这一点?


答案 1

如注释中所述,如果模型未更改时间戳,则不会更新时间戳。但是,如果您需要更新它们,或者想要检查是否一切正常使用 - 更多这里$model->touch()


答案 2

实际上有可能:

$model->updated_at = Carbon::now();
$model->save(['timestamps' => FALSE]);

这将正确地保存到现在。如果您不确定模型的任何列是否已更改,但您确实希望更新无论如何都要更新 - 这就是要走的路。updated_atupdated_at


推荐