Was ist die Methode zum Speichern und Aktualisieren von Viele-zu-viele-Beziehungen in Yii-Framework?Yii-Framework Viele zu vielen Beziehungen
Antwort
Es gibt eine bessere Umsetzung als Verhalten.
Wenn Sie kein Modell für die Tabelle zwischen den beiden Haupttabellen erstellen, besteht die einzige Möglichkeit darin, DAO (Database Access Object) zu verwenden und SQL mit diesem anzugeben.
Schauen Sie sich an, wie Blog-Demo diese Aufgabe erfüllt.
Verwendung MANY_MANY
Beziehungstyp zum Einrichten von vielen zu vielen Verbindungen zwischen Modellen (Eine assoziative Tabelle ist erforderlich, um eine Viele-zu-viele-Beziehung in 1: n-Beziehungen zu trennen) Und jetzt können Sie alle relationalen Funktionen von Active verwenden Aufzeichnungen
Yii Framework - The Definitive Guide to Yii: Working with Databases-Relational Active Record
Sie, dass bis in mysql level..by gehen relationale Sicht unter jeder Tabelle in phpMyAdmin und bieten notwendige relationale condition..and Verwendung MANY_MANY in der Modellklasse innerhalb Beziehungen ..
die folgende Erweiterung tut, was Sie wollen ... Yii Framework - Extension: cadvancedbehavior
Eine wichtige Sache zu beachten: Bei jeder Aktualisierung, die Erweiterung alle bisherigen Rekorde löscht und schafft neue. Ich würde es also nicht verwenden, wenn die intermediäre Tabelle zusätzliche Daten außer den Fremdschlüsseln enthält.
Die Frage ist zu häufig.
Normalerweise erscheinen Datenkomponenten mit MANY to MANY-Beziehungen nacheinander und unabhängig voneinander. Sie müssen also nur eine Aktion nach der anderen einfügen.
Wenn Ihre Beziehung abhängige Aktualisierung benötigt, sollten Sie Benutzer SQL triggers auf der DataBase-Ebene. Dies gewährleistet die Integrität der Daten und ermöglicht eine recht gute Trennung der Geschäftslogik der Anwendung.
CREATE TRIGGER some_trigger
AFTER UPDATE ON some_table
...
END IF;
ähnliche Weise ist relationale Daten in einem logischen Modell auf PHP Ebene (und z.B. manipuliert mit 2-3 AR-Modellen gibt) emulieren und incapsulate SQL löst Logik darin.
Auslöser sind für Wartung schrecklich. Zuerst sollten Sie in Erwägung ziehen, Datenbank-FKS und Kaskadierung zu verwenden ... Auslöser könnten wirklich die letzte Option sein. – armandomiani
Sie müssen Witze machen, nicht wahr? FKs Kaskadierung sind tatsächlich Auslöser! Aber Sie können sie nicht "beim Einfügen" verwenden. Außerdem unterstützt die MyIsam-Engine von MySql keine FKs, z. Was die Wartung betrifft, weiß ich nicht, was das Problem ist, ein DB-Verfahren aufrechtzuerhalten, besonders wenn es ein Trivial ist (und ist wie eine FK-Kaskadierung). –