Cakephp 无法正确删除联接表中的行

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_

这几天来一直给我带来巨大的悲痛,所以我向社区寻求帮助

假设有两个表-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_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正常工作。理想情况下,我不想创建这个额外的主键,但似乎在这个阶段没有它就无法实现结果。如果任何人有任何意见/想法,将不胜感激。