1

新しく作成した yii モデルを 2 回保存しようとしています。最初は自動インクリメント ID を取得するためです。そして、その id 関連のものを保存する 2 回目:

$node = new Node;
$node->attributes = $attrs;
$node->save(); // now I have 'id'

$node->vector = calcVector($node->id); // vector is based on 'id'
$node->save();

2 番目の保存(編集: エラーが別の場所でスローされました) では、次のエラーがスローされます: Integrity constraint violation: 1062 Duplicate entry。予想される動作は、既に保存されているモデルを単純に更新することです。

2回目に保存する正しい方法は何ですか?

(できます$node = Node::model()->findByPk($node->id);が、それは正しくないようです)

4

3 に答える 3

1

設定するだけ

$node->isNewRecord = false;

それから

$node->save();

乾杯

于 2013-09-23T13:30:54.297 に答える
0

ええと、どうやら問題は私が上で説明したことではなかったようです。

2回の保存は期待どおりに機能しています-最初の呼び出しの挿入、2番目の呼び出しの更新。

問題はおそらく、モデルを に保存していたことbeforeSave()です。そこには複雑で紛らわしいロジックがあり、何が起こっているのかわかりませんでした..

于 2013-09-23T01:41:35.950 に答える