これは数日間かなりの悲しみを引き起こしているので、コミュニティに助けを求めています.
2 つのテーブルを想定 - Album HABTM Customer 結合テーブルは customer_albums PK(album_id, customer_id)
私は2つのコントローラ機能を持っています:
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 になります。
INSERT INTO gre49302_digital.customer_albums (album_id, customer_id) VALUES (1, 62)
これは私が期待するものです。
ただし、「Unlike」機能の結果は次のようになります。
SELECT CustomerAlbum.album_id FROM gre49302_digital.customer_albums AS CustomerAlbum WHERE album_id = 1 AND customer_id = 62
DELETE CustomerAlbum FROM gre49302_digital.customer_albums AS CustomerAlbum WHERE CustomerAlbum.album_id = (1)
これは、CakePHP が複合主キーの概念を理解していないことを示しています。
そのため、顧客とアルバムの間の「いいね」を 1 つ削除しようとすると、選択したアルバムのすべてを削除してしまいます。
理想的には、"unlike" 関数は、複合主キーをセレクターとして使用して、customer_albums から単一のレコードを単純に削除する必要があります。