2013-09-05 13 views
5

Chcę usunąć wszystkie zależne rach rekordUsuń wielopoziomowe w CakePHP (łańcuch usuwać)

Moje stowarzyszenie

Oddział model

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ) 
); 

Dealbranch model

var $belongsTo = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 

Deal model

var $hasMany = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 

W kontrolerze Użyłem

$this->Branch->delete($id,true); 

Teraz tutaj whem jestem usuwanie gałęzi, dealbranch więc zależna pomyślnie usunięty, ale żaden z dowolnego rekordu transakcji usunięty

chcę jak: whem Usuwam oddział, więc wszystkie zależne transakcje powinny zostać usunięte, a wszystkie zależne (zależne od dealbranch) zapis transakcji powinny zostać usunięte

tutaj Deal jest dzieckiem Dealbranch i Dealbranch jest dziecko z oddziału

Teraz, dla jednej gałęzi istnieje wiele rekord w Dealbranch i stwardnienia Dealbranch istnieje jeden rekord w Deal

enter image description here

proszę Pomóż mi. Używam CakePHP 2

Odpowiedz

0

wszystkie rekordy modelowych, które są związane z Branch można usunąć za pomocą

$this->Branch->delete($id,true);

Myślę, że jeśli chcesz usunąć rekordy ofertę na kasowania zapisów branży następnie swój model Branch należy skojarzyć z modelem Deal.

Wystarczy spróbować, aby dodać jak to

Oddział modelu

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ), 
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'your_foriegn_key', 
     'dependent' =>true 
    ) 

); 

lub można spróbować jak to

UPDATE:

Według zapotrzebowania tutaj Deal jest dzieckiem Dealbranch i De albranch jest dzieckiem gałęzi Twoje skojarzenia modelu powinny być takie.

Model gałęzi transakcji powinien być taki.

DealBranch model

var $belongsTo = array(
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 
var $hasMany = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
); 

modelu sprawa powinna być.

Deal model

var $belongsTo = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 
+0

ale nie ma żadnego bezpośredniego związku pomiędzy gałęzi i radzić sobie –

+0

Musi istnieć relacja Aby usunąć 'Deal' na deletowaniem' Branch', w przeciwnym razie trzeba napisać kod ręcznie usunąć rekordy okładzina –

+0

ok, oznacza, że ​​nie możemy usunąć rekursywnie (drzewo) usunąć? –

0

Choć wiem, że ludzie w CakePHP nie używać kluczy obcych w swoich bazach danych i opierają się na ramach dbać o te szczegóły, w przypadku gdy ramy daje masz problemy i masz kontrolę nad bazą danych, zaktualizuj swoje ograniczenia klucza obcego do CASCADE w operacjach DELETE DB.

0

Podstawowy problem dotyczy modelu danych. Zgodnie z modelem każdy oddział może być połączony z zerową lub większą liczbą transakcji i na odwrót. Jeśli więc usuniesz gałąź, nie ma sensu usuwać żadnych transakcji, ponieważ transakcja może być powiązana z inną gałęzią. Jeśli transakcja zostanie usunięta, integralność bazy danych zostanie uszkodzona.

Używane ustawienie jest często używane do modelowania relacji M: N.

Cały obraz czy modelu danych:

original model

i co naprawdę znaczy:

new model

modelu Oddział

var $hasMany =array(
'Deal' => array(
    'className' => 'Deal', 
    'foreignKey' => <set_according_to_your_column_names>, 
    'dependent' =>true 
    ) 
); 

modelu Deal

var $hasMany = array(
'Branch' => array(
    'className' => 'Dealbranch', 
    'foreignKey' => <set_according_to_your_column_names>, 
) 
); 

W ten sposób można w zaproszeniu kontrolera tylko:

$this->Branch->delete($id,true); 

lub nawet

$this->Branch->delete($id); 

ponieważ drugi parametr jest domyślnie wartość true.


Przykład M N związek jest Osoba - adresów. Każdy może używać więcej niż jednego adresu (np. Domu i pracy), a jeden adres może być udostępniany przez więcej osób (rodzina, współpracownicy).