Symfony doctrine:schema:update ne fonctionne pas
J'ai un problème étrange :
J'ai une application symfony 2.3 (avec la sonate de l'utilisateur)
J'ai créé un bundle avec une seule entité: l'entité a été créée sans problème
ensuite, j'ai dû modifier l'entité et maintenant il semble être impossible de modifier le schéma :
Pour voir ce qui se passe j'ai augmenté toutes les longueurs de chaîne avec +1
L'entité de code (avec annotations) :
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;
...
Maintenant voir le résultat de :
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
Aucun de la nouvelle longueur est prise en compte :
par exemple, le champ nom doit avoir une longueur=101,
mais le dump-sql donne le nom VARCHAR(100) !
Quelqu'un pourrait-il essayer de comprendre ce qui se passe mal ?
Merci !
EDIT :
J'ai essayé de vider le cache avant de avec :
* php app/console doctrine:cache:clear-métadonnées
* php app/console cache:clear
* par la suppression de tout le contenu en cache des dossiers
J'ai aussi essayé --dump-sql et --force.
Cela ne change rien du tout.
Merci de tout conseil serait le bienvenu !
doctrine:cache:clear-metadata
. Il suffit d'exécuter app/console
pour une liste de commandes
OriginalL'auteur G. Trennert | 2013-11-11
Vous devez vous connecter pour publier un commentaire.
J'ai juste fini sur exactement le même problème: le schéma n'est pas à jour.
Noter que --force revient exactement la même chose que --dump-sql, la seule différence est que --force s'exécute SQL sur la base de données.
Bien que, dans mon cas, la question n'était pas à cause de l' .orm.xml fichier. C'est parce que j'ai mis cela dans le config_dev.xml:
Même quand j'ai une question souvent salvatrice:
memcached de données n'est pas vidé. Donc, j'ai dû redémarrer memcached, alors que tout était de nouveau opérationnel!
Donc merci pour votre question, il m'a conduit au bon endroit dans mon cas.
Mise à JOUR: comme Phil suggéré ci-dessus, l'exécution de cette commande fait le truc trop:
OriginalL'auteur Yvan
Il est possible que vous oubliez d'activer la Doctrine de mappage automatique;
Si mappage automatique est désactivé (ou commenté comme ci-dessus) , vous devriez vous inscrire à des Entités de chaque bundle manuellement.
OriginalL'auteur Saman Mohamadi
Essayez d'utiliser YAML au lieu de la valeur par défaut d'annotation lorsque vous exécutez
Ou au lieu de courir
Vous pouvez simplement créer manuellement votre table MySql qui est une tâche fastidieuse
OriginalL'auteur
J'ai trouvé la solution :
Je n'ai pas vu avant, mais il y avait une doctrine dossier src\Trop\ConfigAppBundle\Ressources\config contenant un fichier appelé ConfigApp.orm.yml :
J'ai supprimé ce dossier et mise à jour le schéma fonctionne de nouveau.
Sûrement, j'ai fait quelque chose pour générer cette doctrine dossier mais je ne sais pas ce que c'était - si quelqu'un pouvait me dire comment faire ce genre de choses - et pourquoi ?
OriginalL'auteur G. Trennert
je pense que c'est à cause de la doctrine:mapping:la commande d'importation. Cette commande enregistre le schéma d'une base de données existante .orm.xml les fichiers. Probebly exécution de cette commande.
J'ai eu le même problème, côte-moi beaucoup de temps pour le découvrir.
OriginalL'auteur psiess
Parce que j'ai été en utilisant
.orm.yml
-mapping, j'ai eu le problème que j'ai créé ledoctrine
-dossier, dans lequel lesyml
mappages étaient présents, sous le mauvais chemin, de sorte que j'ai corrigé en déplaçant ledoctrine
-dossier dans le dossier de laconfig
dossier:...\BundleName\Resources\config\doctrine\MyEntity.orm.yml
OriginalL'auteur goulashsoup
Type
php app/console help doctrine:schema:update
en CLIAlors essayez de le
--force
au lieu de--dump-sql
.Et voici la commande pour supprimer le cache :
N'oubliez pas d'utiliser le
help
mot-clé avant une commande de l'espace de noms afin d'obtenir le message d'aide relative à cette commande.Espère que cela aide
OriginalL'auteur S.Thiongane
Si certaines des réponses données par @rai et d'autres sont corrects, une suggestion pour la version de Symfony est égal ou supérieur à 3,0, veuillez utiliser bin/console plutôt que app/console, comme indiqué ci-dessous,
OriginalL'auteur SandMania
Essayer
c'est la mise à jour de votre schéma de base de données avec entity
OriginalL'auteur bsnrijal