2012-02-15 69 views
0

我執行在後端的用戶界面增加值任意數量的產品模型的集合 - 就像價格層接口。我想知道如何保存這樣的數據通常是這樣做的。Magento的1.6 - 保存從用戶輸入一個數組的

下面是我嘗試一些簡單的代碼(這將引發此錯誤:項目具有相同ID「1」已經存在「):

$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

收集使用getId()方法上添加的項目以獲取內部$_items陣列的方向鍵在錯誤項目具有相同ID「1」已在第二次迭代米存在。是指合同要設置對返回爲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),主鍵字段(通常)設置在資源模型的_construct()方法中,作爲第二個參數_init()呼叫。
因此,如果資源模型的初始化看起來像$this->_init('my_module/my_item', 'item_id')值的$data陣列上設置將array('item_id' => 1, 'foo' => 'bar')