CakePHP在保存数据时遇到问题(HABTM)

时间:2011-02-01 18:37:15

标签: php cakephp cakephp-1.3

我正在尝试创建愿望清单。

有用户和产品型号。用户有愿望清单。愿望清单有很多产品。

我制作用户的原因有wishlist和wishlist有产品,所以我可以有一个像wish_lists / add /: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它每次保存都会告诉我。但没有数据添加到数据库中。

不确定我做错了什么?

2 个答案:

答案 0 :(得分:0)

我从不这样做,我总是构建一个$data数组作为参数1传递给保存函数。

因此,我不确定该语法是否允许您像您一样指定模型,即'Model.field'。无论如何,$this->WishList->save()只会保存愿望清单部分。

在我看来,更好的是:

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

(或类似的东西,我在过去的三个月里一直在编写ColdFusion,我的PHP可能有点混乱)

答案 1 :(得分:0)

您正在设置错误的数组。它应该是$ data ['User'] ['id'] = 123; $ data ['Product'] ['id'] = 321;

$这 - > Wishlist->白水($数据);

没有必要保存名称,因为可以从产品表中找到。

您可以在此处查看代码,了解更多提示https://github.com/Infinitas-Plugins/shop

以下链接中有一个通用的组件方法,可以将产品保存到购物车或愿望清单(不同的数据库),因为它几乎是一样的。

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