IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Doctrine2 PHP Discussion :

Charset de la base et/ou des entités


Sujet :

Doctrine2 PHP

  1. #1
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut Charset de la base et/ou des entités
    Une surprise sur une de mes bases de test.

    Elle n'est pas en "URF8 general ci" ! Ceci après avoir des accents qui ont joué les filles en l'air.

    Je regarde de plus prêt. Je démonte doctrine 2. La création d'une base et... non, pas de paramètres possible pour préciser le charset lors de la création, par doctrine, de la base. Il utilise, pour MySql un "CREATE DATABASE xxxxx" tout simple (cf méthode getCreateDatabaseSQL() de la classe Doctrine\DBAL\Platforms\MySqlPlatform() )

    Pas non plus de paramètre dans l'annotation pour spécifier le charset d'une table. Par contre, dans le code, pour la création d'une table, il y a bien dans la méthode _getCreateTableSQL un charset dans les options avec une valeur par défaut : utf8. Sauvé ? Non ! Il créer les tables en latin1_swedich_ci (swedich !) (possible que cela soit un paramètre par défaut dans MySql).

    Le code fait une obscure recherche d'un paramètre par défaut pour la valeur du charset, mais je n'ai pas encore pu pister l'origine du paramètre.

    Déjà rencontré cela ?
    Une solution ?

    Je prends !!!
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Par défaut MySQL est en latin1 donc Doctrine prend le ce paramètre en compte. t'as bien rajouté l'option charset pour les tables ?

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Il n'y a pas d'option charset dans les paramètre utilisable dans les annotations...

    Ce qui rend sa déclaration plus ... difficile

    A certains moment quant je passe plus d'une demi journée sur un truc qui devrait être réglé en 10mn, c'est ... prise de tête.


    J'ai bien trouvé un paramètre charset à mettre dans la configuration de la base de données, mais il n'est pas pris en compte dans la création de la base (le code ne le gère pas). Et pour l'instant, vu que j'ai regardé le code des entités, il ne veut plus rien créer... J'ai du mettre un espace de trop quelque part... (profond soupir d'un désespoir certain)
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    A priori, la PR7 a changer un paquet de truc au niveau des déclarations d'entity avec annotation.

    Et bien sur, pas la moindre documentation qui colle...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Est ce que mettre ceci suffit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    framework:
        charset:       UTF-8
    J'ai déjà recréé le schéma entier par doctrine et tout reste en utf8.
    Un petit si la réponse convient. Merci.

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    non, celui-ci y est depuis toujours sur ce projet.

    Je pense que c'est la déclaration dans la partie orm qu'il faut faire. Mais impossible de tester, toutes mes entitées sont "plantée", lors de la génération il me redéclare les propriétés déjà déclarée. Bien sur, à la première exécution, il plante...

    Mais j'ai eu une idée devant mon jeu de tarot ce soir ("Michel, à quoi tu penses ? C'est à toi de jouer... " "Vous ne pouvez pas comprendre" ). Je teste demain (trop tard là) et je poste, si c'est la solution.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je n'ai pas (encore) réglé les charset, mais j'ai compris pourquoi les entities étaient généré n'importe nawak !

    Depuis la PR7 la méthode de génération des entities depuis des fichiers annotation a changé dans Symfony2 (pas vérifié dans doctrine, pas non plus fait d'introspection pour savoir où la modification à été faîte).

    Avant on créait une classe du nom de l'entité à générer. Puis on appliquait un "doctrine:generate:entities "XxxxxxBundle"" pour générer les geter dans la classe.

    Maintenant, ceci n'est plus possible. A priori (je n'ai pas tout testé mais je pense ne pas être trop à côté) il y a deux approches.

    Approche "pure et dure". Écriture intégral de la classe de l'entity ce qui permet de faire ce que l'on veut (mais les getters sont à ce payer à la main).

    Approche "plutôt douce". Il faut passer par la création d'un fichier "~MonEntity.php" et y définir les propriétés de l'objet à générer et les annotations qui vont avec. Aucun code de geter. Ensuite la commande "doctrine:generate:entities " permet de créer les MonEntity.php qui correspondent avec les geter qui vont bien. En fait, cette méthode ressemble furieusement à la méthode par un fichier yml.

    Ce qui me pose un problème de structure des objets. Vu que la deuxième méthode me semble plus appropriées mais qu'elle ne permet pas de faire des geter particulier notamment pour des champs de style (et pas de type) enum. Et les classe particulière pour la gestion des droits.

    Il manque un niveau d'objet entre la classe de base auto générée et la classe utilisée. Un peu comme dans symfony 1 avec les classes BaseXxxx et la classe utilisée Xxxx.

    A voir si la classe repository peut être utilisée dans cet optique ?

    A voir comment il est maintenant possible de créer des classes entity elle même fille de...

    Ce message sera recopié dans le sujet plus général sur les entité et les réponse devront y être portée, du moins pour les entity, pour les charset, c'est une histoire non encore traitée.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Pour les entités etendues d une autre classe , je l ai deja fait. C'est dans le zip que j ai partagé dans le topic http://www.developpez.net/forums/d10...serbundle-pr7/

    En fait, il faut utiliser l'annotation MappedSuperClass. (uniquement annotation ou xml; ne fonctionne pas en yml)

    je vais jeter un coup d oeil a cette generation d entités ce soir, je tiens au courant.
    Un petit si la réponse convient. Merci.

Discussions similaires

  1. Création des entités en Base de données
    Par Rony Rauzduel dans le forum Doctrine2
    Réponses: 5
    Dernier message: 09/07/2013, 11h42
  2. Création des entités dans la base de données
    Par Leaffy dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 26/12/2011, 11h35
  3. Réponses: 0
    Dernier message: 02/02/2011, 02h39
  4. Réponses: 3
    Dernier message: 08/11/2008, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo