Est-il possible de spécifier un type de colonne de unsigned integer
dans Doctrine 2 ?
Cette opération échouera avec SQLite, qui ne prend en charge que les nombres entiers signés.
Est-il possible de spécifier un type de colonne de unsigned integer
dans Doctrine 2 ?
/\*\*
\* @ORM\\Column(name="id", type="integer", options={"unsigned"=true})
\*/
Il n'y a pas d'endroit dans la documentation (que j'ai vu) qui parle de cela, mais cela fonctionne.
Mise à jour
Définition dans Yaml (à partir de la version 2.4 pour la clé primaire)
id:
type: integer
options:
unsigned: true
Cette opération échouera avec SQLite, qui ne prend en charge que les nombres entiers signés.
Ceci est d'ailleurs mentionné dans la documentation docs.doctrine-project.org/projects/doctrine1/fr/latest/fr/ et oui, il s'agit d'une base de données spécifique.
Vous pouvez le faire, mais vous perdrez en portabilité. Utiliser columnDefinition
et lui attribuer la valeur integer unsigned
. Le code réel dépend de ce que vous utilisez.
columnDefinition : extrait SQL DDL qui commence après le nom de la colonne et spécifie la définition complète (non portable !) de la colonne. [ ] Cet attribut permet d'utiliser les fonctionnalités avancées de RMDBS. Cependant, vous devez Toutefois, il convient de faire preuve de prudence quant à l'utilisation de cette fonctionnalité et aux conséquences qui en découlent. SchemaTool ne détectera plus correctement les modifications apportées à la colonne si si vous utilisez "columnDefinition".
Référence doctrinale : https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#column
Documentation Doctrine 1 y Documentation Doctrine 2 a dit que vous pouviez le faire de cette façon :
Annotations PHP :
/**
* @Column(type="integer", name="some_field", options={"unsigned":true})
*/
protected $someField;
Yaml : ( voir la documentation )
MyEntity:
fields:
someField:
type: integer
column: some_field
options:
unsigned: true
J'espère que cela aidera quelqu'un à gagner du temps ;)
Les décimales permettent d'obtenir des nombres aussi importants et de conserver l'outil SchemaTool, il suffit de régler l'échelle sur 0.
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
Consultez un article complet sur les raisons de ce choix aquí . [EDIT](le lien ne fonctionne pas) J'ai collé l'article ci-dessous. C'est moi qui l'ai écrit de toute façon ;)
des nombres non signés si grands que votre cerveau va exploser ! w/Doctrine 2
Les ORM présentent un problème inhérent. Comment prendre un type de données que seuls certains SGBDR supportent et vous permettre de l'utiliser quand même ? En ce qui concerne Doctrine 2 et les nombres non signés, ils sont devenus un peu paresseux.
Tout ce que je veux faire, c'est stocker mes identifiants facebook 64bit. C'est si difficile que ça ? Mon SGBDR est mySQL, donc tout ce dont j'ai besoin, c'est d'un bigint non signé.
<?php
/**
* @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned")
*/
Protected $facebookId;
Cela semble tout à fait normal jusqu'à ce que vous lisiez ceci :
columnDefinition : extrait SQL DDL qui commence après le nom de la colonne et spécifie la définition complète (non portable !) de la colonne. Cet attribut permet d'utiliser les fonctionnalités avancées de RMDBS. Il convient toutefois de faire preuve de prudence quant à l'utilisation de cette fonctionnalité et aux conséquences qui en découlent. SchemaTool ne détectera plus correctement les modifications apportées à la colonne si vous utilisez "columnDefinition". Fondamentalement, cette fonctionnalité vous permet d'intégrer des éléments non pris en charge dans la définition de la colonne. Rendre les nombres non signés techniquement NON SUPPORTES ! Sans oublier que mes systèmes de déploiement de développement et d'assurance qualité s'appuient fortement sur SchemaTool. Nous pouvons remercier une combinaison de développeurs paresseux chez Doctrine et sqlite3 pour ce petit grain de folie.
Cela m'a immédiatement incité à faire une recherche sur Google. Je n'aime pas réfléchir si ce n'est pas nécessaire. Qu'est-ce que j'ai trouvé ? Tout le monde utilise des varchars. VARCHARS !?!? J'ai failli avoir une crise cardiaque. C'était tout simplement inacceptable.
On entre ainsi dans la décimale. C'est parfait. La taille de stockage est variable et elle est stockée en binaire, de sorte que l'indexation est très rapide. Il suffit de fixer la précision décimale à zéro et voilà. L'ORM peut porter cela sur n'importe quel SGBDR, c'est assez grand pour que nous ne nous préoccupions pas du problème signé/non signé non supporté et c'est rapide comme l'éclair. decimal(20,0) devrait gérer notre taille facebook de dix-huit quintillions quatre cent quarante-six quadrillons sept cent quarante-quatre trillions soixante-treize milliards sept cent neuf millions cinq cent cinquante un mille six cent quinze tout à fait convenablement.
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
Le lien vers l'article complet est cassé. Et la réponse ne fonctionne pas ou n'a pas de sens sans ce lien. Pourriez-vous, s'il vous plaît, donner des précisions ou réparer le lien ?
Je pense que l'échelle et la précision sont inversées. Il faudrait /** @Column(type="decimal", scale=0, precision=20, nullable=false) */
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.