我正在尝试创建愿望清单。
有用户和产品型号。用户有愿望清单。愿望清单有很多产品。
我制作用户的原因有wishlist和wishlist有产品,所以我可以有一个像wish_lists / add /:product_id
的网址我使用wish_lists
,id
和user_id
创建了一个名为name
的表格。
我还创建了一个名为products_wish_lists
的表格wish_list_id
和product_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 :(得分: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