Fügen Sie einer bestehenden Entität in Symfony eine Spalte hinzu
Lesezeit: 6 Minuten
Ich habe mit Symfony auf meinem Webserver herumgespielt und eine Entität mit Doktrin für meine Datenbank erstellt. Ich wollte einer dieser Entitäten eine Spalte hinzufügen … Ich wollte so etwas tun:
php app/console doctrine:modify:entity
Jetzt weiß ich, dass dieser Befehl nicht existiert, aber gibt es eine Möglichkeit (ohne eine vollständige Migration durchzuführen), einfach eine Spalte hinzuzufügen.
PS Ich weiß, dass ich die PHP-Datei öffnen und die Spalte dort textuell hinzufügen und dann das Schema aktualisieren könnte, aber ich verteile dies an einige Clients und mag einen eher “Befehlszeilen-ähnlichen” Ansatz.
Mach es mit Code. Die Generatorwerkzeuge des ORM sollten nicht so missbraucht werden.
– Okramius
18. Februar 2013 um 17:04 Uhr
PR Ribeiro
Eigentlich macht die Verwendung von Doctrine überhaupt keinen Sinn, um so etwas zu tun, wie Sie es vorgeschlagen haben.
Doctrine ist ein ORM-Tool (Object-Relational Mapping). Das bedeutet, dass Sie die Datenbank von Ihrem PHP-Code abstrahieren möchten, Sie delegieren Datenbankkram an Doctrine. Doctrine leistet auf diesem Gebiet wunderbare Arbeit.
Da Sie Ihre Kunden/Peers mit der neuesten Version des Modells auf dem Laufenden halten möchten, sollten Sie die Doctrine Migrations ( http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html ). Auf diese Weise können Datenbankaktualisierungen verwaltet werden. Darüber hinaus haben Sie die vollständige Kontrolle darüber, was beim Upgraden/Downgraden der Datenbank zu tun ist. Sie könnten zB Standardwerte setzen, bevor Sie den FK hinzufügen.
Die Schritte zum Hinzufügen einer neuen Eigenschaft in der Klasse sollten wie folgt sein:
Für Symfony2:
Ändern Sie die Klasse durch:
Acme\MyBundle\Entity\Customer und fügen Sie die gewünschte Eigenschaft hinzu;
Führen Sie den Konsolenbefehl aus (Datenbank aktualisieren)
php bin/console doctrine:schema:update --force
ein Typ mit niedrigem Ruf hat versucht, dies mit einer Bearbeitung hinzuzufügen; Ich werde es hier setzen, da dies hilfreich sein kann: für php bin/console doctrine:schema:update --force: WARNUNG offizielle Dokumente schlagen vor, dass man dies nicht in der Produktionsumgebung verwenden sollte!
– Jakow L
3. August 2017 um 14:35 Uhr
Warum verwenden wir keine Migrationen für Symfony 3?
– Leigh Bicknell
16. April 2020 um 7:57 Uhr
Fügen Sie eine neue Spalte in der bestehenden Entität auf Symfony hinzu. Ich habe da das gleiche Problem. nachdem ich lange recherchiert habe sind da die besten lösungen.
Lösungsarbeit auf Symfony 4
Beispiel:
Blog-Entität, die bereits in einem erstellt wurde Name Spalte sind da und ich möchte hinzufügen Beschreibungsspalte. so einfach eingeben
php bin/console make:entity Blog
Nachdem Sie diesen Befehl ausgeführt haben, möchten Sie eine neue Spalte hinzufügen
Sie möchten auf jeden Fall die PHP/XML/YML-Datei öffnen, in der Ihre Entität definiert ist, und die Spalte dort hinzufügen. Dann verwenden Sie die Befehlszeile und sagen
console doctrine:schema:update
Auf diese Weise sind Ihre Entitätsdefinitionen mit der Datenbank synchron und Ihre Datenbank wird aktualisiert.
Es gibt eine Falle auf Schritt php app/console doctrine:migrations:diff oben beschrieben, wenn Doktrinmigrationen verwendet werden.
Sie haben Änderungen an der Entität vorgenommen, alles scheint gültig zu sein, aber der Befehl zum Erstellen von Migrationen php app/console doctrine:migrations:diff sagt “Keine Änderungen in Ihren Zuordnungsinformationen festgestellt.”
Und Sie können nicht finden, wo sich die alte Datenbankstruktur befindet, die Suche in Dateien hat nichts gefunden.
Für mich war der Schlüssel, den Redis-Cache zu leeren.
Natürlich ist Ihr Doktrin-Metadaten-Cache möglicherweise nicht Redis, sondern etwas anderes, z. B. Dateien in App/Cache oder irgendetwas anderes. Vergessen Sie nicht, über das Löschen des Caches nachzudenken.
Vielleicht hilft es jemandem.
Ich habe einen Weg gefunden, die neue Spalte in YourBundle/Resources/Config/doctrine/Yourentity.orm.yml hinzuzufügen.
Dann wurden Getter- und Setter-Methoden in der Entity-Klasse hinzugefügt.
Dann tat php app/console doctrine:schema:update --force von der Konsole. Es hat für mich funktioniert.
Kunal
FÜR SYMFONY3-BENUTZER…
Hier müssen Sie zwei Schritte ausführen, um Änderungen an Ihrer Entität vorzunehmen. Schritt 1: Öffnen Sie Ihre Entitätsdatei..Für EX: “Acme\MyBundle\Entity\Book”
Die aktuelle Entität hat einige Felder wie: ID, Name, Titel usw. Wenn Sie nun ein neues Feld von “Bild” hinzufügen und eine Änderungsbeschränkung für das Feld “Titel” vornehmen möchten, fügen Sie das Feld “Bild” mit Getter und Setter hinzu
Mach es mit Code. Die Generatorwerkzeuge des ORM sollten nicht so missbraucht werden.
– Okramius
18. Februar 2013 um 17:04 Uhr