CakePHP hasAndBelongsToMany (HABTM) Удалить запись соединения

У меня есть отношения HABTM между пользователями и местоположениями. Обе модели имеют соответствующий набор переменных $hasAndBelongsToMany.

Когда я управляю местоположениями пользователей, я хочу удалить связь между пользователем и местоположением, но не местоположением. Очевидно, что это местоположение может принадлежать другим пользователям. Я ожидаю, что следующий код удалит только запись таблицы соединений, предоставленную ассоциациями HABTM, но он удалил обе записи.

$this->Weather->deleteAll(array('Weather.id' => $this->data['weather_ids'], false);

Однако я новичок в CakePHP, поэтому я уверен, что что-то упускаю. Я попытался установить для каскада значение false и изменить порядок моделей с помощью User, User-> Weather, Weather-> User. Не повезло.

Заранее благодарю за любую помощь.


person Jason McCreary    schedule 15.05.2010    source источник


Ответы (1)


Не совсем уверен, как Weather связан с вашими моделями, поэтому я просто использую традиционные имена, LocationsUser — это таблица соединений. Это должно удалить все ассоциации между пользователем с идентификатором $id и любыми местоположениями:

$this->User->LocationsUser->deleteAll(array('LocationsUser.user_id' => $id), false);

Обратите также внимание на отсутствие закрывающей скобки в фрагменте кода.

person deceze♦    schedule 15.05.2010
comment
Да, извините, модель на самом деле Погодные локации, и я использовал их взаимозаменяемо. Ваш код был точным, я не понимал, что могу ссылаться на модель ассоциации. Вот что у меня было для полноты. Работает правильно! $this->User->UsersWeather->deleteAll(array('UsersWeather.weather_id' => $this->data['weather_ids'], 'UsersWeather.user_id' => $this->user['User']['id'])) - person Jason McCreary; 15.05.2010