2014-07-17 71 views
1

我有一個產品控制器,當我保存一個新產品時,我想將一些記錄保存到另一個相關控制器,以記錄產品與哪些類別相關聯。cakephp - 使用create()不能按預期工作

我的代碼我使用的是:

$this->Product->create(); 
if ($this->Product->save($this->request->data)) { 
    $newProductId = $this->Product->getInsertID(); 
    //associate products with categories 
    foreach($categoriesToSave as $key=>$value) { 
     $saveArray['CategoriesProduct'] = array('category_id'=>$value, 'product_id'=>$newProductId); 
     $this->Product->CategoriesProduct->create(); 
     $this->Product->CategoriesProduct->save($saveArray); 
     $this->Product->CategoriesProduct->clear(); 
    } 
} 

出於某種原因,不過,即使$categoriesToSave中有10個項目中,只有最後一個被保存。因此,它只創建一個新的CategoriesProduct項目,並將每個記錄保存在最後一個記錄中,而不是新記錄create()

任何人都可以解釋我做錯了什麼,我怎麼能做到這一點?

+1

對'CategoriesProduct'模型有'唯一'約束嗎?還是一些具體的定義? Product'和'CategoriesProduct'之間有什麼關係? – Holt

+0

你在調試環境中嗎?如果沒有,我總是檢查日誌,當有什麼事情發生時不清楚。他們位於這裏:app \ tmp \ logs – enigmasck

+1

omg ...我是一個愚蠢的白癡。我忽略了categories_products表的主鍵 - 謝謝指出:) –

回答

0

我會做它的方式會是這樣:

//Add a counter 
$c = 0 
foreach($categoriesToSave as $key=>$value) { 
    $saveArray[$c]['CategoriesProduct']['category_id'] = $value; 
    $saveArray[$c]['CategoriesProduct']['product_id'] = $newProductId; 
    $c++; 
} 
$this->Product->CategoriesProduct->saveMany($saveArray); 

我不認爲是這樣做的唯一方式,但應該只是罰款。

祝你好運!