迷惑な問題があります。フォームのどのフィールドが変更されたかを調べて、それをテーブルに挿入しようとしています。次のようにdoUpdateObjectasでvar_dumpを実行できました
public function doUpdateObject($values)
{
parent::doUpdateObject($values);
var_dump($this->getObject()->getModified(false));
var_dump($this->getObject()->getModified(true));
}
そして、$ this-> getObject()-> getModifiedは、trueまたはfalseに設定することで、前後の値を指定するのに機能しているようです。
私が今直面している問題は、どういうわけか、sfWidgetFormSelectが私のフィールドの1つを文字列として保存しているように見えることです。保存する前は、まったく同じフィールドがintでした。(私は前と後の両方でvar_dumpによってこのアイデアを得ました)。
両方のvarダンプの結果は次のとおりです。
array(1) {["annoying_field"]=> int(3)} array(1) {["annoying_field"]=>string(1)"3"}
これにより、教義はこれが修正であると考え、したがって誤検知を与えるようです。
私の基本形では、私は持っています
under $this->getWidgets()
'annoying_field' => new sfWidgetFormInputText(),
under $this->setValidators
'annoying_field' => new sfValidatorInteger(array('required' => false)),
最後に、構成済みのForm.class.phpで、ファイルを次のように再構成しました。
$this->widgetSchema['annoying_field'] = new sfWidgetFormSelect(array('choices' => $statuses));
statusesは、{"" a "、" b "、" c "、"d"}などの値を含む配列です。
ステータスのインデックスをデータベースに保存したいだけです。
また、変更を別のデータベーステーブルに挿入するにはどうすればよいですか?私のログテーブルとしましょう。
なぜこれが起こるのかについてのアイデアやアドバイスはありがたいです、私はそれを理解しようとしていて、無駄にさまざまなキーワードをグーグルで閲覧しています。
ありがとう!
編集:
さて、テストのためだけにスキーマに整数という別のフィールドを作成しました。エントリを作成して保存し、編集しました。
今回も同じことが起こりました!