2017-08-20 3 views
0

Ich habe eine MySQL-Datenbank mit Doctrine mit Symfony erstellt und musste eine Tabelle ändern, indem ich zwei ihrer Attribute extrahierte und sie einer neuen Entität zuwies. Die erste Entity heißt "Area" und die zweite heißt "Formato". Zuvor, als ich einen neuen Bereich erstellen wollte, habe ich ID, Name, Breite und Höhe angegeben. (Da die Anwendung in Spanisch entworfen ist, heißt die Breite "ancho" und die Höhe wird "alto" genannt) Nun, mit dem neuen Design, ist die Idee, seine ID, Name und FormatId bereitzustellen. Natürlich werden bereits einige Formate in die Format-Tabelle eingefügt, und Area wird FormatId als Fremdschlüssel für Formato verwenden. Bisher es ist nicht eine komplexe Sache zu tun, aber wenn ich versuche, eine neue Umgebung zu erstellen, erhalte ich eine Fehlermeldung:Doktrin erzeugt falsche INSERT-Anweisung

AbstractMySQLDriver->convertException('An exception occurred while executing \'INSERT INTO areas (descripcion, nombre, idarea, ancho, alto, idmedio, idformato) VALUES (?, ?, ?, ?, ?, ?, ?)\' with params ["", "Zilosoft Area7", "21626759324", null, null, "28545628", "1"]:SQLSTATE[42S22]: Column not found: 1054 Unknown column \'ancho\' in \'field list\'', object(PDOException)) 

So, wie Sie sehen können, die neue INSERT Anweisung Vermischung der alten Attribute mit der neuen, die eine Art "gemischte" oder "fusionierte" Anweisung erzeugt.

Ich habe immer und immer wieder durch die Quelldateien suchen, kann aber nicht verstehen, wie das passiert ist, als meine Entities sind alle auf dem Laufenden, die von diesem diesem Bereich bedeutet ein Format hat und nicht „ancho“ noch " alto ", und Formato ist eine getrennte Entität mit" ancho "und" alto "darin.

Wissen Sie, ob ich in Doctrine "zurücksetzen" oder "Cache löschen" möchte, damit es die korrekte Insert-Anweisung generiert?

Übrigens sind formato Daten, die aus einem Kombinationsfeld in einer Twig-Vorlage entnommen und aus der Formatos-Tabelle geladen werden.

+0

Versuchen Sie, den Cache Ihrer Anwendung zu löschen. Frühere Dateien, die auf veraltete Entitäten verweisen, klingen wie das Problem. –

+0

Danke @AndrewNolan für Ihre Antwort. Nach dem Versuch, den Cache zu leeren, erhalte ich immer noch den gleichen Fehler. –

Antwort

0

Sie verpassen nur den letzten Schritt

So können Sie Ihre Einheiten aktualisiert zu verbessern, zu aktualisieren oder einfach Ihre Datenstruktur ändern, aber Sie MySQL-Datenbank haben noch keine Ahnung, dass Sie diese Änderungen vorgenommen. Der Weg, um das zu beheben, besteht darin, Doctrine zu update the schema zu sagen. die Art, wie Sie dies tun ist, indem Sie den folgenden Befehl auf Ihrem Computer ausgeführt wird:

php bin/console doctrine:schema:update --force 

beachten Sie, dass --force versuchen, die Abfrage direkt ausgeführt wird. Wenn Sie die Abfragen lieber selbst ausführen möchten, können Sie die Option --dump-sql verwenden, die alle Abfragen ausgibt.

+0

Ich habe getan, was Sie gesagt haben, aber leider jetzt bekomme ich diesen anderen Fehler: {Fatal Compile Error: Klasse QuieroAvisosBundle \ Entity \ Area kann nicht deklariert werden, da der Name bereits verwendet wird} –

+0

Dieser Fehler kann auftreten, wenn der Namespace in der Klasse angegeben ist nicht die richtige (dh wenn Sie eine andere Datei kopieren/einfügen und vergessen haben, den Namespace zu ändern). Das Löschen des Caches mit 'app/console cache: clear' an dieser Stelle kann ebenfalls helfen. –

+0

Leider @William Perron, obwohl Ihre Beratung sinnvoll ist, hat es das Problem auch nicht gelöst. Ich bekomme immer noch genau den gleichen Fehler. Ich arbeite mit meinem Kollegen mit SVN, das ist die einzige Möglichkeit, diese Dateien aktualisiert wurden. Es wurde keine Kopierpaste ausgegeben. Ich kann nicht verstehen, warum diese Entität nicht nur aktualisiert werden kann, anstatt Doctrine als neue Entität zu erstellen. In der Vergangenheit, als wir ein ähnliches Problem hatten, mussten wir eine neue Datenbank erstellen und ein brandneues Projekt von Grund auf neu erstellen, was tatsächlich die schlechteste Lösung aller Zeiten ist. –

Verwandte Themen