Mam taki problem.
Mam tabelę Wyniki: http://pastebin.com/F423UF7f
oraz tabelę Drużyna: http://pastebin.com/5fLyu9M3
Jak zrobić, żeby podczas usuwania rekordu Wyniku usunął się wpis w tabeli, która jest automatycznie tworzona na potrzeby ManyToMany, ale został w Drużynie?
Próbowałem Cascade, ale usuwało mi z 3 tabel, nie zostawało w Drużynie. W obecnej formie, podczas usunięcia, poprawnie usuwa się z Wyników, ale nie tabeli, która jest tworzona specjalnie na potrzeby ManyToMany.
Błąd, który dostaje:
:
"
An exception occurred while executing 'INSERT INTO tablica_Druzyn (wynik_id, druzyna_id) VALUES (?, ?)' with params [1, 1]:
SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: tablica_Druzyn.wynik_id, tablica_Druzyn.druzyna_id
"
Wydaje mi się, że jest pozostałością po usuwaniu rekordu wyniku, ponieważ po stronie Wyniku oraz Drużyny znikają pozostałości, po tym co było kiedyś rekordem Wyniku.
Przed usunięciem, dodałem 3 drużyny, które mają swoje pola, oraz jeden wynik, w którym zaznaczyłem dwie pierwsze drużyny.
Przed usunięciem:
http://pastebin.com/2SvubcKh
Po usunięciu:
http://pastebin.com/ytbpUpSn
Brak podświetlenie ponieważ użyłem dump z poziomu symfony i nie wiem czym czy istnieje takie podświetlenie i jaki język.
Cel?
1. Usunąć rekord wyniku,
2. Usunąć rekord Wyniku, który zachodzi z drużynami
3. Zostawić Drużyny, które wchodziły w relacji z rekordem Wyniku.
4. Usunąć wszystkie wpisy dotyczące rekordu Wyniku, które są zawarte w specjalnej tabeli, która się tworzy wraz z stworzeniem relacji ManyToMany.
1 i 2 na obecną chwilą działa. Jeśli dodam słowo cascade={"remowe"} Uzyskuje 3 i 4, ale tracę 1 i 2. Wszelakie idee, pomysły, mile widziane.
/** * @ORM\ManyToMany(targetEntity="Druzyna", inversedBy="wynikFK") * @ORM\JoinTable(name="tablica_Druzyn", * joinColumns={@ORM\JoinColumn(name="wynik_id", referencedColumnName="id", onDelete="REMOVE")}, * inverseJoinColumns={@ORM\JoinColumn(name="druzyna_id", referencedColumnName="id", onDelete="REMOVE")} * * ) * */ private $tablicaDruzyn;
Dodanie onDelete z REMOVE oraz dodanie joinColumns i inverseJoinColumns, załatwiło poprawnie sprawę. Tylko dlaczego tego nie uwzględnili w dokumentacji?