Symfony doctrine:schema:update funktioniert nicht
Ich habe ein seltsames problem :
Ich habe eine Anwendung symfony 2.3 (mit sonata Benutzer)
Erstellt habe ich ein bundle mit einer Entität die Entität erstellt wurde, ohne ein problem
dann musste ich ändern Sie die Entität, und jetzt scheint es unmöglich zu sein, das schema zu ändern :
Sehen, was passiert, ich erhöhte den string-Längen mit +1
Die Einheit code (mit Anmerkungen) :
namespace Too\ConfigAppBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* ConfigApp
*
* @ORM\Table(name="ConfigApp")
* @ORM\Entity(repositoryClass="Too\ConfigAppBundle\Entity\ActiviteRepository")
*/
class ConfigApp
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $nom
*
* @ORM\Column(name="nom", type="string", length=101, unique=true)
*/
private $nom;
/**
* @var string $nomSlug
*
* @Gedmo\Slug(fields={"nom"}, updatable=true, separator="_")
* @ORM\Column(name="nomSlug", type="string", length=101, nullable=true)
*/
private $nomSlug;
/**
* @var string $email
*
* @ORM\Column(name="email", type="string", length=151)
*/
private $email;
/**
* @var string $telephone
*
* @ORM\Column(name="telephone", type="string", length=16)
*/
private $telephone;
/**
* @var datetime $cree_le
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="cree_le", type="datetime")
*/
private $cree_le;
/**
* @var datetime $modifie_le
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="modifie_le", type="datetime")
*/
private $modifie_le;
...
Sehen jetzt das Ergebnis :
php app/console doctrine:schema:update --dump-sql
CREATE TABLE ConfigApp (id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(100) NOT NULL, nomSlug VARCHAR(100) NOT NULL, email VARCHAR(150) NOT NULL, telephone VARCHAR(15) NOT NULL, cree_le DATETIME NOT NULL, modifie_le DATETIME NOT NULL, PRIMARYKEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB
Keiner der neuen Länge berücksichtigt :
zum Beispiel im Bereich nom haben sollten, Länge=101,
aber die dump-sql gibt nom VARCHAR(100) !
Könnte jemand versuchen, herauszufinden, was falsch läuft ?
Danke !
BEARBEITEN :
Ich habe versucht, den cache zu löschen, bevor mit :
* php app/console doctrine:cache:clear-Metadaten
* php app/console cache:clear
* durch das löschen aller Inhalte in cache-Ordner
Habe ich auch versucht --dump-sql und --force.
Dadurch ändert sich gar nichts.
Bitte jeder Tipp wäre willkommen !
- Ich würde versuchen, löschen der meta-Daten-cache. Ich denke, es ist
doctrine:cache:clear-metadata
. Führen Sie einfachapp/console
für eine Liste von Befehlen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gerade zu Ende gegangen, bis auf die genau gleiche Problem: das schema nicht aktualisieren.
Beachten Sie, dass die Option --force gibt, die genau das gleiche wie --dump-sql, der einzige Unterschied ist, dass --force läuft der SQL gegen die Datenbank.
Obwohl, in meinem Fall, das Problem war nicht, weil der .orm.xml Datei. Es sei denn ich habe die Einstellung in der config_dev.xml:
Selbst wenn ich ein Problem oft Salvatorische:
dem memcached-Daten werden nicht geleert. So musste ich neu starten, memcached, dann war alles wieder läuft!
Also danke für deine Frage, Sie führte mich an die richtige Stelle in meinem Fall.
UPDATE: wie Phil oben vorgeschlagen, dieser Befehl ausgeführt wird funktioniert der trick auch:
Ist es möglich, dass Sie vergessen zu aktivieren Doktrin auto-mapping;
Wenn auto-mapping deaktiviert ist (oder kommentiert wie oben) , sollten Sie sich Personen jedes bundle manuell.
Versuchen, YAML verwenden, anstatt die Standard-annotation, wenn Sie Sie ausführen
Oder stattdessen laufen
Können Sie nur manuell erstellen Sie Ihre MySql-Tabelle, die eine sehr mühsame Aufgabe
Fand ich die Lösung :
Ich habe nicht vor, aber es war eine Lehre, die Ordner im src\Zu\ConfigAppBundle\Resources\config enthält eine Datei namens ConfigApp.orm.yml :
Löschte ich diese Ordner und jetzt aktualisiert das schema funktioniert wieder.
Sicherlich habe ich etwas zu generieren, diese Lehre-Ordner, aber ich weiß nicht, was es war - wenn jemand mir sagen könnte wie das Zeug erzeugt wird - und warum ?
ich denke, seine weil der doctrine:mapping:import-Befehl. Dieser Befehl speichert das schema einer bestehenden Datenbank in .orm.xml -Dateien. Probebly Sie diesen Befehl ausführen.
Ich hatte das gleiche Problem, Küste mich eine Menge Zeit, um das herauszufinden.
Weil ich war mit
.orm.yml
-mapping hatte ich das Problem, dass ich diedoctrine
-Ordner, in dem dieyml
Zuordnungen vorhanden waren, unter dem falschen Pfad, so ich befestigt es durch verschieben derdoctrine
-Ordner, in dem dieconfig
Ordner:...\BundleName\Resources\config\doctrine\MyEntity.orm.yml
Typ
php app/console help doctrine:schema:update
im CLISo versuchen die
--force
statt--dump-sql
.Und hier ist der Befehl für die cache-clearing :
Vergessen Sie nicht, verwenden Sie die
help
Schlüsselwort bevor ein Befehl namespace, um zu bekommen die Meldung, dass das Kommando.Hoffe es hilft
Obwohl einige der gegebenen Antworten von @rai und die anderen richtig sind, wird eine weitere Anregung für die Symfony-version gleich oder höher 3.0 verwenden Sie bitte Ablage/Konsole statt app/console, wie unten gezeigt,
Versuchen
dies ist zu aktualisieren Sie Ihre Datenbank-schema mit entity -