Lehre 2 Vereins ohne foreign key-Einschränkungen
Ich bin in den Prozess der Umwandlung von einem legacy-PHP-Anwendung auf Symfony 2. Die Anwendung der Daten ist nicht sehr konsequent im moment, so ich möchte vermeiden, erstellen von foreign key-Einschränkungen. Ich habe folgende Anmerkung in mein "Produkt" entity-Klasse:
class Product {
//some definitions
/**
* @ORM\ManyToOne(targetEntity="Manufacturer")
* @ORM\JoinColumn(name="manufacturer_id", referencedColumnName="id" )
*/
private $Manufacturer;
}
Wenn ich app/console doctrine:schema:update
bekomme ich den SQL-Befehl
ALTER TABLE products ADD CONSTRAINT FK_F6FA18741C3BF575
FOREIGN KEY (manufacturer_id) REFERENCES manufacturer(id);
Wie kann ich diese vermeiden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich musste gehen durch den gleichen Prozess vor kurzem-und zum Glück gibt es eine einfache Lösung, fügen Sie einfach
nullable=true
auf die Spalte Anmerkung.Dies funktioniert so lange, wie die vorhandenen Daten auch gültig ist, in meinem Fall musste ich die 0 NULL ist und Schlüssel vorhanden sind, nicht mehr zu NULL.
JoinColumn
Anmerkung aber die foreign key-Einschränkung wird derzeit noch erstellt.Grundsätzlich kann man nicht verhindern, dass die sql-Befehle erzeugt werden. Zumindest nicht, ohne Tauchen in die Lehre-code.
Jedoch, Sie brauchen nicht, um tatsächlich gelten die Einschränkungen für Ihre Datenbank. D2 funktioniert wunderbar ohne Sie.
app/console doctrine:schema:update --force
mehr, weil das update beendet, wenn er versucht, führen Sie die FK-constraints.Lassen Sie sich die ManyToMany und die JoinColumn-Definitionen und Griff der Hersteller-Eigenschaft in Ihr custom-Produkt-repository mit einer öffentlichen getManufacturer Methode, erstreckt sich das automatisch generierte Produkt-repository.
Hatte ich ein problem mit dem gleichen Befehl. Ich habe die Ausnahme:
Mir dabei geholfen, deklarieren Sie die Spalte als unique (in deinem Fall-id).
Nun
app/console doctrine:schema:update
läuft wieder gut.Müssen Sie verloren Fremdschlüssel auf null, dann können Sie Ihre contstraint. Folgende Abfrage gibt Ihnen die ids von Datensätzen zu ändern:
Versuchen, hinzufügen onDelete="CASCADE" wie