【问题标题】:CakePHP having trouble saving data (HABTM)CakePHP 无法保存数据 (HABTM)
【发布时间】:2011-02-01 18:37:15
【问题描述】:

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

有用户模型和产品模型。用户有一个愿望清单。愿望清单有很多产品。

我让用户拥有愿望清单并且愿望清单具有产品的原因是我可以拥有一个类似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 时,它每次都告诉我它保存了。但没有数据被添加到数据库中。

不确定我做错了什么?

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

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

    因此,我不确定该语法是否允许您像以前那样指定模型,即'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 可能有点糊涂)

    【讨论】:

      【解决方案2】:

      您设置的数组错误。它应该是 $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

      【讨论】:

        猜你喜欢
        • 2011-09-14
        • 2013-09-24
        • 2012-08-08
        • 2010-12-18
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多