0


1

これは簡単でなければなりません…​ DBの* updated_at *フィールドにすでに格納されている現在の日付を保存しようとしています。 同じ行の単一のフィールド値を更新してから保存していますが、updated_atフィールドを更新したくありません。 *既存のupdated_atの値を保持したい

私はこれを1つ、場合によっては2つの状況でのみ実行したいので、プログラム内の他のすべてのアクションについてモデルを上書きする必要はありません。

私はこれを試してみました:

$ originalDate = $ this-> getUpdatedAt(); $ this-> setUpdatedAt($ originalDate); $ this-> save();

これはうまくいくはずのようですが、それでもフィールドを更新するようです。

3 Answer


3


`updated_at`カラムは変更されていなければ現在の時刻でのみ設定されます。 これは `isColumnModified`メソッドでチェックされます。 最初に何らかの値に変更してから元の値に戻すと、オブジェクトはこれを修正したと考えてだまされる可能性があります。

$ updatedAt = $ book-> getUpdatedAt(); $ book-> setUpdatedAt(null); $ book-> setUpdatedAt($ updatedAt);

$ book-> setInStock(4); $ book-> save();
Symfony 1.2では、この動作は http://trac.symfony-project.org/browser/branches/1.2/lib/plugins/sfPropelPlugin/lib/builder/SfObjectBuilder.php[SfObjectBuilder

addSave()]に追加されました。無効にすることはできません( updated_at`または updated_on`という名前の列をチェックします)。 symfony 1.3と1.4では、Propel 1.4の新しい振る舞いが使われるので、効果を得るために明示的にそれらを追加しなければならないと思います。 同じトリックが更新を回避するのに役立ちます。


1


このわずかな変更でうまくいくようです。

$ originalDate = $ this-> getUpdatedAt(); $ this-> save();

$ this-> setUpdatedAt($ originalDate); $ this-> save();

_ 2つの別々の保存をする必要がないように、もっとエレガントな方法が必要です。


0


symfonyでは、通常テーブルが_created_at_という名前のカラムを持つとき、レコードが作成された日付のタイムスタンプを保存するために使用されます。 レコード自体が更新されるたびに現在の時刻の値に更新される_updated_at_列にも同じことが適用されます。

幸いなことに、symfonyはこれらのカラムの名前を認識し、それらの更新をあなたに代わって処理するでしょう。 手動で_created_at_列と_updated_at_列を設定する必要はありません。それらは自動的に更新されます。

他の_created_at_と_updated_at_の情報を保持したい場合は、別のフィールドを作成する必要があります。