Cakephp 无法正确删除联接表中的行
这几天来一直给我带来巨大的悲痛,所以我向社区寻求帮助 假设有两个表-Album HABTM Customer 联接表是customer\u albums PK(album\u id,customer\u id) 我有两个控制器功能:Cakephp 无法正确删除联接表中的行,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,这几天来一直给我带来巨大的悲痛,所以我向社区寻求帮助 假设有两个表-Album HABTM Customer 联接表是customer\u albums PK(album\u id,customer\u id) 我有两个控制器功能: public function like($album_id) { if ($this->request->is('post')) { $this->Album->CustomerAlbum->save(array('album_
public function like($album_id) {
if ($this->request->is('post')) {
$this->Album->CustomerAlbum->save(array('album_id' => $album_id,'customer_id' => $this->Auth->user('id')));
$this->redirect(Controller::referer());
}
}
而这个
public function unlike($album_id) {
$this->log($album_id);
if ($this->request->is('post')) {
$this->Album->CustomerAlbum->deleteAll(array('album_id' => $album_id,'customer_id' => $this->Auth->user('id'),false));
$this->redirect(Controller::referer());
}
}
“Like”函数将生成SQL:
插入gre49302\u digital.customer\u相册(相册id,客户id)值(1,62)
这正是我所期望的
但是,“不同”功能会导致:
从gre49302\u digital.customer\u相册中选择CustomerAlbum.album\u id作为CustomerAlbum,其中album\u id=1,customer\u id=62
将CustomerAlbum从gre49302\u digital.customer\u相册中删除为CustomerAlbum,其中CustomerAlbum.album\u id=(1)
这向我表明CakePHP不理解复合主键的概念
因此,当试图删除客户和相册之间的一个“like”时,我最终删除了所选相册的所有内容
理想情况下,“不像”功能只需使用复合主键作为选择器从客户相册中删除一条记录。这可能是原因所在。您当前的代码是:
deleteAll(array('album_id' => $album_id, 'customer_id' => $this->Auth->user('id'), false));
我假设您打算将cascade
设置为false
。如果是这种情况,那么右括号的顺序就错了
将代码更改为:
deleteAll(array('album_id' => $album_id, 'customer_id' => $this->Auth->user('id')), false);
注意
('id')、false)
vs('id')、false))
我对联接表结构做了一些更改-删除现有(复合)主键并创建新的id INT pk。完成此操作后,Cake将按照删除和插入的预期运行。id INT pk在逻辑上超出了需求,但似乎需要它才能使Cake正常工作。理想情况下,我不想创建这个额外的主键,但似乎在这个阶段没有它就无法实现结果。如果任何人有任何意见/想法,将不胜感激。