Moja baza danych używa silnika MyISAM pod maską, więc nie mogę wywołać akcji kasowania kasowania, ponieważ MyISAM nie obsługuje tego. W tym samym czasie chciałbym usunąć powiązane rekordy w mojej aplikacji yii2. Jak mogę to zrobić?Usuwanie powiązanych rekordów w Yii2 - najlepsze praktyki
Odpowiedz
Uwaga: poniższe rozwiązanie będzie działać tylko wtedy, gdy używasz ActiveRecord delete method.
Można użyć metody beforeDelete i tam usuwać powiązane zapisy - w tym przypadku napiszemy kod jeden raz i będzie on wykonywany za każdym razem, gdy wywołujemy $model->delete()
.
Lub możesz dodać obsługę do zdarzenia EVENT_BEFORE_DELETE.
Przepraszamy za spóźnioną odpowiedź. Myślę, że przede wszystkim optymalizacja zależy od samej bazy danych (poprawne indeksy itp.). Jako opcję można utworzyć procedurę składowaną, która usuwa powiązane rekordy i wywołuje tę procedurę ... – rkm
Co z tworzeniem wyzwalaczy? –
Zobacz https://stackoverflow.com/questions/31110462 –
Istnieje kilka opcji rozwiązania tego problemu.
1) Tworzenie trigger po stronie DB:
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
END;
2) Usuń related records wewnątrz yii2 beforeDelete funkcję:
public function beforeDelete() {
if (!parent::beforeDelete()) {
return false;
}
// ... custom code here ...
return true;
}
wyzwalacze są szybsze, a dobry w egzekwowaniu więzów integralności, dlatego Wybrałem je.
- 1. Szyny - usuwanie niezapisanych powiązanych rekordów
- 2. Usuwanie wszystkich powiązanych rekordów z wielu tabel
- 3. Zapisywanie powiązanych rekordów w laravel
- 4. Factory Girl: Tworzenie powiązanych rekordów
- 5. CloudKit Fetching CKReferences, najlepsze praktyki?
- 6. Najlepsze praktyki ASP.NET Security
- 7. Najlepsze praktyki scalania SVN
- 8. Najlepsze praktyki modelowania LDAP
- 9. Najlepsze praktyki LDAP
- 10. Najlepsze praktyki fragmentów
- 11. Transakcje NHibernate Najlepsze praktyki
- 12. IBOutlet najlepsze praktyki
- 13. Najlepsze praktyki HttpRuntime.Cache
- 14. Najlepsze praktyki ActionListener
- 15. Najlepsze praktyki CoreData
- 16. Najlepsze praktyki testowania integracji
- 17. Shared NSDateFormatter - najlepsze praktyki?
- 18. CXF Wsdl2Java Najlepsze praktyki
- 19. C#: Najlepsze praktyki Debug.Print
- 20. Android strings.xml Najlepsze praktyki?
- 21. Najlepsze praktyki LinqToSql
- 22. Najlepsze praktyki dotyczące debugowania
- 23. DTO: najlepsze praktyki
- 24. Swagger Najlepsze praktyki
- 25. CSS Outline najlepsze praktyki
- 26. Najlepsze praktyki wtrysku zależnego
- 27. OpenGL vào najlepsze praktyki
- 28. Najlepsze praktyki - NSManagedObjectContextObjectsDidChangeNotification w iOS
- 29. Wielowątkowość najlepsze praktyki w java
- 30. Najlepsze praktyki asynchronicznego Webrequestu
Możliwy duplikat [Yii2: Jak jednocześnie usuwać powiązane dane z bazy danych?] (Https://stackoverflow.com/questions/31110462/yii2-how-to-simultaneously-delete-related-models-data- from-data-base) –