0

これは数日間かなりの悲しみを引き起こしているので、コミュニティに助けを求めています.

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 から単一のレコードを単純に削除する必要があります。

4

1 に答える 1

-1

これが原因である可能性があります。現在のコードは次のとおりです。

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)対に注意してください('id'), false))

于 2012-08-26T07:20:59.467 に答える