2012-02-15 7 views
0

私はバックエンドで、値段のインターフェイスのように、任意の数の値を製品に追加するためのユーザーインターフェイスを実装しています。このようなデータの保存が通常どのように行われているかを知りたい。以下はMagento 1.6 - モデルのコレクションとしてユーザ入力から配列を保存する

は私の試みのいくつかの単純化されたコードです(このエラーがスローされます:「1」はすでに「存在する同じIDを持つ項目):

$myItemCollection = $product->getMyItemCollection(); 
if(!$myItemCollection) { 
    $myItemCollection = Mage::getModel('my_module/my_item')->getCollection(); 
} 

foreach($product->getMyData('items') as $data) { 
    $myItem = Mage::getModel('my_module/my_item')->addData($data); 
    // Item with the same id "1" already exist on the second iteration 
    $myItemCollection->addItem($myItem); 
} 

$myItemCollection 
    ->setDataToAll('product_id', $product->getId()) 
    ->save(); 

$製品 - > getMyData( 『アイテム』)は何かを返します等:

array(
    1 => array(
     'foo' => 'bar' 
    ), 
    2 => array(
     'bin' => 'baz' 
    ), 
    3 => array(
     'buz' => 'fuz' 
    ) 
) 

答えて

0

コレクションが内部$_itemsアレイの配列のキーを取得するために追加されたアイテムにgetId()方法を使用して、同じIDを使用してエラー項目「1」が既に2回目の繰り返しM上存在しますあなたはid値として返される新しいモデルにいくらかの価値を設定しています。

getId()nullの場合、そのアイテムはそのエラーがスローされることなくコレクションに$_items[] = $itemを使用して追加されます。 これは、標準モデルとリソース・モデルを使用している場合、$dataがおそらく投稿した配列と一致しないことを意味します。

モデルのID値を返すために使用されるキーは、エンティティの種類によって異なります。
モデルがEAVベースのリソースモデル(Mage_Eav_Model_Entity_Abstract)を使用する場合、キーはentity_idです。 array('entity_id' => 1, 'foo' => 'bar')

モデルは平らなテーブルベースのリソース・モデル(Mage_Core_Model_Resource_Db_Abstract)を使用している場合、主キーフィールドは、(通常)_init()呼び出しの2番目のパラメータとして、リソース・モデルの_construct()方式に設定されています。
リソース・モデルの初期設定が$this->_init('my_module/my_item', 'item_id')の場合、$dataアレイに設定する値はarray('item_id' => 1, 'foo' => 'bar')になります。

関連する問題