0

次の問題があります。フォームから取得したオブジェクトがあり、その結果を、古いバージョンのフォームが InspectionReport オブジェクトとして保存されているデータベースと比較します。

古いバージョンのフォームがある場合は、新しい情報を古いものとマージします。

// $found_inspection_report is the report found in the database, 
// $inspection_report is the one from the form
$found_inspection_report->merge($inspection_report);

次に、マージされたオブジェクトを新しい値でデータベースに古いオブジェクトとしてデータベースに保存したいと思います。マージによって $found_inspection_report の ID が上書きされたため、最初に古い ID を元に戻しました。

$found_inspection_report->setId($old_id);

そして、私はそれを保存しています:

$found_inspection_report->save();

しかし、次のエラーが表示されます。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'

だから私の質問は、おそらく古いIDを元に戻さなくても、正常にマージし、データベース内の古いオブジェクト/レコードを更新/保存する方法はありますか?新しいレコードとしてではなく、ID 1で言う.

4

1 に答える 1

1

マージの代わりに synchronizeWithArray メソッドを使用してください。こちらのドキュメントを参照してください

$old->synchronizeWithArray($arrayNew);
$old->save();
于 2012-11-09T12:42:20.013 に答える