[SOLVED] Problem z kasowaniem danych z tabeli MANY_MANY

Witam Wszystkich!

Mam problem z kasowaniem danych z tabeli, w której opisane są relacje. Mam jedną tabelę Group, drugą tabelę User, i tabelę ich relacji GroupUser.

Relacje w modelu Group:

return array(

 'uzytkownicy'=>array(self::MANY_MANY, 'User', 'GroupUser(id_group, id_user)'),


 'uzytkownicyCount'=>array(self::STAT, 'User', 'GroupUser(id_group, id_user)'),

);

Relacje w tabeli User:

return array(

 'grupy'=>array(self::MANY_MANY, 'Group', 'GroupUser(id_user, id_group)'),


 'grupyCount'=>array(self::STAT, 'Group', 'GroupUser(id_user, id_group)'),

);

Wszystko pięknie działa do czasu, gdy chcę modyfikować przypisania użytkownika do grup.

Dodawanie działa dobrze:

Yii::app()->db->createCommand("INSERT INTO GroupUser(id_group, id_user) VALUES($grupa_id, $element_id)")->execute();

Ale usuwanie już nie:

Yii::app()->db->createCommand("DELETE FROM GroupUser WHERE id_group = $grupa_id AND id_user = $element_id")->execute();

Nie ma żadnych błędów, niby operacja wykonana jest OK, a i tak wpis z tabeli nie jest usuwany.

Co robię źle?

Używam najnowszej wersji Yii (1.1.1).

Pozdrawiam serdecznie i bardzo proszę o pomoc :)

Dlaczego nie używasz AR do wstawiania i kasowania danych?

Bez różnicy, przy AR też nie działa :)

A może coś więcej. Jakieś błędy? Włącz logowanie (najlepiej www) i zobacz jakie są wykonywane zapytania sql. Będziesz miał czarno na białym.

Żadnych błędów… logowanie mam włączone z parametrami trace, info, error, warning, tak więc nic się nie prześlizgnie. Zapytanie SQL odczytanie z loga wygląda następująco:

DELETE FROM GroupUser WHERE id_group = 8 AND id_user = 1

czyli całkowicie poprawnie IMHO.

A jak masz zdefiniowane klucze obce w tabeli? Może po prostu nie masz ustawionego onDelete = cascade ?

Ale cascade to nie jest po to, aby np. przy okazji kasowania grupy kasować wszystkich użytkowników z nią powiązanych? A mi chodzi tylko u usunięcie przypisania, czyli z tabeli GroupUser kasujemy wpis, i tylko to.

Sorry, za szybko przeczytałem posta. Faktycznie usuwasz z tabelki której pola referują do innych tabel.

Może to głupie pytanie/rada, ale czy próbowałeś na szybko wygenerować nową aplikację, potem yiic modele a następnie sprawdzić czy z tej aplikacji działa.

A co dzieje się jak korzystasz z query zamiast execute? execute() przewidziana jest dla zapytań nie zwracających żadnych wyników a usuwanie zwraca ilość usuniętych wierszy. Moze tutaj tkwi problem?

Wygenerowanie nowej aplikacji pomogło mi, bo tam wszystko działało dobrze. Niestety, ciała dalem ja :stuck_out_tongue_winking_eye: Okazało się, że zapomniałem jednego znaku ‘=’ i przy sprawdzaniu komendy wysyłanej przez ajaksowe zapytanie

if($komenda == true) powinno być if($komenda === true), przez to za każdym razem wpis mi się kasował i od razu dodawał :)

Dzięki wszystkim za pomoc i poświęcony czas!