Yii Framework Forum: usuwanie kaskadowe - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

usuwanie kaskadowe Rate Topic: -----

#1 User is offline   zbh 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 10-September 10

Posted 15 November 2010 - 03:10 AM

Mam taką bazę danych (w uproszczeniu):

Klient
id
imie
nazwisko

Wniosek
id
jakies_dane
id_klienta

Decyzja
id
jakies_dane
id_wniosku

I w każdym modelu mam funkcję usuwającą powiązane modele, np we wniosku:

protected function beforeDelete()
	{
		Decyzja::model()->deleteAll('wniosek_idwniosek='.$this->idwniosek);
		return true;
	}


No i przy usuwaniu np. wniosku są usuwane wszystkie decyzje, ale już przy usuwaniu klienta się wywala, tak jakby nie wykonuje beforeDelete w podmodelu (we wniosku).
0

#2 User is offline   gawronzo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 10-November 09
  • Location:Poland/Lublin

Posted 15 November 2010 - 03:54 AM

Hmm. Osobiście uważam, że powinieneś to zrobić prościej - czyli pozwolić bazie danych na automatyczne usunięcie powiązanych rekordów z innych tabel. W MySQL w tabelach typu InnoDB wystarczy zdefiniować odpowiednie klucze obce wraz z warunkiem ON DELETE CASCADE (w tabelach wniosek i decyzja). Wtedy np. po usunięciu klienta nastąpi kaskadowe usunięcie wszystkich wniosków i decyzji z nim powiązanych. Ja bym kombinował w tym kierunku ..Jeśli to inna baza to warto sprawdzić czy obsługuje TRIGGERY, które też można wykorzystać do usuwania powiązanych rekordów).
0

#3 User is offline   zbh 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 10-September 10

Posted 15 November 2010 - 04:55 AM

baza jest trochę bardziej złożona dlatego chciałem mieć pełną kontrolę nad usuwaniem i zrobić to od strony programowej, poza tym w niektórych modelach w funkcjach beforeDelete() mam operacje zmieniania różnych wartości a nie tylko usuwanie i to również nie działa przy usuwaniu 2 poziomy wcześniejszego modelu.
0

#4 User is offline   Trejder 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,197
  • Joined: 06-October 10
  • Location:Southern Poland

Posted 29 November 2010 - 05:36 AM

View Postzbh, on 15 November 2010 - 03:10 AM, said:

protected function beforeDelete()
	{
		Decyzja::model()->deleteAll('wniosek_idwniosek='.$this->idwniosek);
		return true;
	}

No i przy usuwaniu np. wniosku są usuwane wszystkie decyzje, ale już przy usuwaniu klienta się wywala, tak jakby nie wykonuje beforeDelete w podmodelu (we wniosku).

Nie wiem, czy to cokolwiek pomoże w Twoim problemie, ale w jakimś tam kodach zwróciłem uwagę na fakt, że w funkcjach typu beforeDelete() nie powinieneś używać return true tylko przed lub po własnej funkcji wywołać parent->beforeDelete(). Tym różni się EDP (event-driven programming) od podejścia proceduralnego. Może gdzieś w tych okolicach tkwi problem?
Proud Cookbook author, though still learning powerful Yii! :] See my generic profile for more information. Cheers!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users