2011-02-01 154 views
0

我試圖創建願望清單。CakePHP無法保存數據(HABTM)

有用戶和產品型號。用戶有一個願望清單。願望清單有許多產品。

我使其用戶的心願和心願具有產品是這樣我就可以有一個像wish_lists一個url原因/添加/:PRODUCT_ID


我創建的表稱爲wish_listsiduser_id,並name

我還創建了一個名爲products_wish_lists的表,其中wish_list_idproduct_id

我在這裏做的是心願控制器:

class WishListsController extends AppController 
{ 
    var $hasOne = 'User'; 
    var $hasMany = 'Product'; 

    function beforeFilter() 
    {   
     parent::beforeFilter();  
     $this->Auth->deny('add');  
    } 

    function add($id) 
    { 
     $user = $this->Session->read("Auth.User"); 

     $this->WishList->set(array(
      'User.id' => $user['id'], 
      'Product.id'=>$id, 
      'WishList.name'=>'default' 
     )); 

     if($this->WishList->save()) 
     { 
      $this->Session->setFlash('This product has been added to your wishlist.', 'flash_good'); 
     } 
     else 
     { 
      $this->Session->setFlash('Error: This product was not added to your wishlist.', 'flash_bad'); 
     } 

     $this->redirect(array("controller"=>"products","action"=>"view",$id)); 
    } 
} 

當我去localhost/wish_lists/add/1它告訴我,每次它保存。但沒有數據被添加到數據庫。

不知道我在做什麼錯?

回答

0

我從來不這樣做,我總是建立一個$data數組作爲參數傳遞給保存功能。

因此,我不確定該語法是否允許您指定模型,例如'Model.field'。無論如何,$this->WishList->save()只會保存Wishlist部分。

更好,在我看來,應該是:

$saveData = array(
    'User'=>array('id'=>$user['id']), 
    'Product'=>array('id'=>$id), 
    'WishList'=>array('name'=>'default')); 
$this->WishList->saveAll($saveData); 

(或類似的東西,我一直在爲過去三個月編程ColdFusion和我的PHP可以有點怪僻)

0

你正在設置數組錯誤。它應該是$ data ['User'] ['id'] = 123; $ data ['Product'] ['id'] = 321;

$ this-> Wishlist-> saveAll($ data);

保存名稱沒有意義,因爲可以從產品表中找到該名稱。

,你可以看看這裏的代碼更多的想法https://github.com/Infinitas-Plugins/shop

有下面的鏈接,節省產品加入購物車或心願(不同分貝的)作爲它的幾乎是同樣的事情,一個通用組件的方法。

https://github.com/Infinitas-Plugins/shop/blob/master/controllers/components/shop.php#L62