Ответ 1
Как упоминалось в комментариях, если модель не изменилась, временные метки не будут обновляться. Однако, если вам нужно их обновить или хотите проверить, работает ли все нормально $model->touch()
- больше здесь
Я использую 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 и т.д.
Как я буду делать это правильно?
Как упоминалось в комментариях, если модель не изменилась, временные метки не будут обновляться. Однако, если вам нужно их обновить или хотите проверить, работает ли все нормально $model->touch()
- больше здесь
На самом деле можно:
$model->updated_at = Carbon::now();
$model->save(['timestamps' => FALSE]);
Это правильно сохранит updated_at
. Если вы не уверены, изменился ли какой-либо из столбцов модели, но вы хотите обновить updated_at
независимо - это путь.
Да, то, что сделал Musterknabe, правильно, но он также должен проверить свою модель SitemapData.php, для этого он должен установить $timestamps = true;
<?php
class SitemapData extends Eloquent {
public $timestamps = true;
}