C’est un point très mal explicité dans la documentation de Symfony. Lorsque vous être en train de concevoir votre schéma au sein du fichier eponyme – schema.yml -, vous aimeriez bien avoir le contrôle de vos champs de type DECIMAL, non ?

La documentation n’étant pas très bavarde, peut être comme moi vous contentiez vous d’indiquer :

amount:   { type: decimal }

Pour exécuter ensuite des requêtes SQL bien placées pour modifier ce ce champ et lui affecter par exemple un stockage de 3 chiffres après la virgule. Je n’avais pas trouvé la réponse immédiatement, mais après un petit tour On Ze Ouaib, j’ai enfin déniché ce qui me manquait :

amount:  { type : decimal, size: 8, scale: 2 }

Pour un champ de type DECIMAL(8,2). Reste plus qu’à compléter la documentation Symfony…

Trackback

6 commentaires jusqu'a maintenant

  1. Mère Teresa @ 2009-06-08 18:11

    Aha, ma question sera : comment as-tu trouvé cette information ?

  2. Adrien Mogenet @ 2009-06-08 18:42

    Toi, tu veux gagner l'iPhone de TDW :-D
    Je ne me souviens plus du tout où j'ai pu trouver cette info… il me semble que ça devait être sur un blog que je suivais !

  3. francois @ 2009-11-25 17:03

    Bonjour,
    Je suis à la recherche d’informations concernant le stockage des champs de type montants (pour des prix de vente par exemple), je pense stocker des decimal(x,y) en base comme vous le précisez mais je n’ai aucune idée de ce qu’il faut utiliser comme validator et comme type de champ PHP (float ne manque-t-il pas de précision ?), avez vous des infos sur ce sujet ?

  4. Cela dépend des traitements appliqués / appliquables (calculs de TVA, de réductions…).

    Sinon concrêtement, un montant tient dans un type Decimal(X,2), X pouvant valoir par exemple 10 (pour gérer un montant à 8 chiffres).

    Si vous souhaitez appliquer des taux par la suite en évitant les erreurs d’arrondi, Decimal(X,4) ira très bien !

  5. Pour ma part, j’utilise les annotations et je voudrais un champ DECIMAL(11,8) pour des coordonnées géographiques (latitude et longitude).

    Je tente donc ma chance avec :

    @ORM\Column(name= »latitude », type= »decimal », size= »11″, scale= »8″)

    Lorsque je fais mon « update » avec la console, il me sort une BadMethodCallException: Unknown property ‘size’ on annotation ‘Doctrine\ORM\Mapping\Column’

    Je décide donc de m’en tenir à la propriété « scale » et d’éliminer le « size »… :

    @ORM\Column(name= »latitude », type= »decimal », scale= »8″)

    Je fais mon update.
    Cette fois-ci ça passe mais je me retrouve bien évidemment avec un champ DECIMAL(10,8).

    La propriété « size » n’étant pas reconnue dans les annotations, comment faire donc lorsqu’on utilise les annotations comme moi? =)

    Merci d’avance.

  6. Bingo!
    Je n’aurai finalement pas cherché longtemps… Google m’a amené vers la doc de Symfony qui parle de la propriété ‘precision’…

    C’est ici pour les curieux : http://www.doctrine-project.org/docs/orm/2.0/en/reference/basic-mapping.html#doctrine-mapping-types

    Donc pour obtenir un champ DECIMAL(11,8) avec les annotations, je fais un simple :

    @ORM\Column(name=’latitude’, type=’decimal’, precision=’11′, scale=’8′)

Ajouter votre commentaire