モデル保存SetDataとAddDataを使用してデータベースに追加しない
-
13-12-2019 - |
質問
モデルを持っていて、データベースにモデルを追加しようとしていました。PHPスクリプトを実行してすべての機能を追加するとうまくいき、例外はスローされません。しかし、データはデータベースに追加されず、MySQLで検証しました。
MySQLクエリを追跡しようとし、SetDataとAddDataの両方で、MagentoはUPDATEコマンドを挿入コマンドで呼び出すことを検索しました。なぜこれはこんな振る舞いですか?この動作はモデル実装のためである可能性がありますか?
データを追加するためのコードスニペット -
$data = array('appid'=>'new_appid','custid'=>1,'info'=>'info');
$model = Mage::getModel('interface/data')->setData($data);
try {
$insertid = $model->save()->getId();
echo "Data Succesfull inserted. Insert Id : ".$insertid;
}
catch (Exception $e){
echo $e->getMessage();
}
. 解決
これはあなたがここでやったこと
$data = array('appid'=>'new_appid','custid'=>1,'info'=>'info');
$model = Mage::getModel('interface/data')->setData($data);
$model->save();
.
ここでは、appid
がEntiry primary_key
のinterface/data
であると仮定しています。
このコードは何ですか?
基本的にあなたがしていることはあなたのエンティティをインスタンス化し、そのエンティティに値を設定してから保存処置を実行します。
実際に何が起こるのか!
あなたが期待しているのは挿入ですが、エンティティが利用できるデータのために、Magentoはデフォルトで update を実行しようとします。
なぜそれが起こるのか?
これは、それがそれがprimary_key
(つまり、appid
)のカスタム値new_appid
で既に設定されているためです。 primary_key
が設定されているので、Magentoはデフォルトでは、UPDATE
を実行したいとします。そのため、appid = 'new_appid'
を使用してレコードを見つけようとします。しかし、そのようなデータはデータベースに存在しないため、この操作で失敗します。
これをどのように克服することができますか?
主キーが設定されている場合は、更新を行うのではなくインサートを行う方法があります。これを実行するには、_isPkAutoIncrement
にfalse
を設定する必要があります。デフォルトでは、この値はyes
に設定されています。これは、主キーが設定されている場合に更新が必要なことを示します。この値をfalse
に設定すると、Magentoに指示して、更新が必要ではなく挿入が必要です。それで、これをモデルファイルに入れてください。
protected $_isPkAutoIncrement = false;
. 他のヒント
Magentoはアップデートを実行します。 既存のIDによって指定されているように、既存のレコードの更新を正しく試してみてください。
リソースモデル定義、または表定義が表示されないので、デフォルトの行IDとして定義したものがわかりません。(通常これはentity_idです)
は、テーブルのデフォルトIDフィールドで、自動増分?
は、DBのAUTO_INCREMENTフィールドに使用するフィールドに、Arrayに入力しているフィールドのいずれかですか?
もしそうであれば、そのフィールドを配列に囲み、それはMagentoを挿入させる。
マゼントでユーザーがモデルを作成すると、主キーがIDと呼ばれる自動増分フィールドになることを期待しています。自動インクリメントキーがない場合は、DBオブジェクトに_ispkautoIncrementフラグをfalseに設定する必要があります。
保存コールの場合 - フラグが偽の場合、デフォルト値を持つ行のテーブルをチェックします。それがそこにそれが更新されるならば、それ以外の場合はそれがinsrtを実行します。