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などです。
どうすれば正しくできますか?
コメントで述べたように、モデルが変更されなかった場合、タイムスタンプは更新されません。ただし、それらを更新する必要がある場合、またはすべてが正常に機能しているかどうかを確認する場合は、$model->touch()
-more here を使用してください。
ええMusterknabeが行ったことは正しいですが、モデルもチェックする必要がありますSitemapData.php _$timestamps = true;
_
_<?php
class SitemapData extends Eloquent {
public $timestamps = true;
}
_
実際に可能です:
$model->updated_at = Carbon::now();
$model->save(['timestamps' => FALSE]);
これでupdated_at
が正しく保存されます。モデルの列のいずれかが変更されたかどうかは不明ですが、updated_at
を更新する必要がある場合-これが方法です。