簡體   English   中英

CakePHP無法保存數據(HABTM)

[英]CakePHP having trouble saving data (HABTM)

我正在嘗試創建願望清單。

有用戶和產品模型。 用戶有一個願望清單。 願望清單有很多產品。

我將其設置為用戶擁有心願單,而心願單具有產品的原因是,這樣我可以擁有一個網址,例如wish_lists / add /:product_id


我用iduser_idname創建了一個名為wish_lists的表。

我還創建了一個名為wish_list_idproduct_id的表products_wish_lists

我在這里制作的是願望清單控制器:

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它每次保存時都會告訴我。 但沒有數據被添加到數據庫中。

不確定我在做什么錯嗎?

我從來沒有那樣做,我總是建立一個$data數組作為參數1傳遞給save函數。

因此,我不確定該語法是否允許您像完成操作一樣指定模型,即'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可能會有點兒混亂)

您將數組設置錯誤。 應該是$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM