phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

Ist es möglich, einen Fremdschlüssel in Yii zu reparieren, ohne ihn in der Datenbank eingerichtet zu haben?

Wenn ich mich nicht irre, brauchen Sie es nicht dass mySql Fremdschlüsselbeziehungen erzwingt, damit sie weiterhin in Yii funktionieren. Das Einrichten von FK-Einschränkungen in mySql stellt die ordnungsgemäße Datenbankintegrität sicher, aber ich glaube nicht, dass Yii dies tatsächlich zur Laufzeit verwendet.

Wenn ich anfangs yiic (von Gii) zum Erstellen des Projekts ausführe, denke ich, dass es in der DB nachdenkt, um die richtigen Beziehungen im Modell zu erstellen, aber es verwendet sie danach nicht mehr.

Yii verwendet dann dieses Wissen (von yiic) über die Tabellenbeziehungen, um Ihnen das Leben zu erleichtern, indem es Shortcut-Methoden für den Zugriff auf relationale Daten bereitstellt und sicherstellt, dass Sie nicht gegen mySql-Beschränkungen verstoßen und hässliche SQL-Fehler erhalten usw. Aber Sie können es trotzdem verwenden Yii-Beziehungslogik ohne die zugrunde liegenden SQL-Einschränkungen. Das einzige Problem wird sein, dass, wenn Yii es vermasselt und einen nicht existierenden FK oder etwas anderes zuweist, Ihre Datenbank diesen Fehler nicht abfängt (Ihre Datenintegrität wird fehleranfälliger).

Um Ihre Produkte mit Abteilungen zu verknüpfen, stellen Sie einfach sicher, dass Sie ein Feld „department_id“ im Produkt haben (was sich so anhört, als würden Sie es tun). Fügen Sie dann eine solche Beziehungsregel zu Produkt:

hinzu
'department' => array(self::BELONGS_TO, 'Department', 'department_id'),

Und in Ihrem Department-Modell:

'products' => array(self::HAS_MANY, 'Product', 'department_id'),

Jetzt sollten Sie die Relation wie gewohnt verwenden können:

$myProductModel->department; // returns the model of the Department referenced
$myDepartmentModel->products; // returns the models of all Products in the department

Viel Glück und lass es mich wissen, wenn ich ganz daneben liege und es bei dir nicht funktioniert!