繁体   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