Элегантная модель не обновляет update_at timestamp

Я использую 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

Опять же, обновленная метка update_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_at. Если вы не уверены, изменился ли какой-либо из столбцов модели, но вы хотите обновить updated_at независимо - это путь.

Ответ 3

Да, то, что сделал Musterknabe, правильно, но он также должен проверить свою модель SitemapData.php, для этого он должен установить $timestamps = true;

<?php 

 class SitemapData extends Eloquent {

        public $timestamps = true;
}