valor - php convert to positive number
Doctrine 2+valor sin signo (4)
¿Es posible especificar un tipo de columna de unsigned integer
en Doctrine 2?
Los decimales permitirán números tan grandes y le permitirán conservar SchemaTool, simplemente configure la escala en 0.
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
Consulte un informe completo sobre por qué here . [EDITAR] (el enlace no funciona) He pegado el artículo a continuación. Fue escrito por mí de todos modos;)
¡Números sin firmar tan grandes que tu cerebro explotará! w / Doctrine 2
Los ORM tienen un problema inherente. ¿Cómo se toma un tipo de datos solo con soporte de RDBMS y le permite usarlo de todos modos? Bueno, cuando se trata de Doctrine 2 y números sin firmar se pusieron un poco vagos.
Todo lo que quiero hacer es almacenar mis identificaciones de facebook de 64 bits. ¿Qué tan difícil es eso? Bueno, mi RDBMS es mySQL, así que todo lo que realmente necesito es un bigint sin signo.
<?php
/**
* @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned")
*/
Protected $facebookId;
Esto parece encontrar y dandy hasta que lea esto:
columnDefinition: fragmento de SQL DDL que se inicia después del nombre de la columna y especifica la definición de columna completa (¡no portátil!). Este atributo permite hacer uso de funciones avanzadas de RMDBS. Sin embargo, debe hacer un uso cuidadoso de esta característica y las consecuencias. SchemaTool ya no detectará los cambios en la columna correctamente si usa "columnDefinition". Básicamente, esta característica permite liberar cosas no admitidas en la definición de la columna. ¡Haciendo que los números sin firmar sean técnicamente NO APOYADOS! Sin mencionar que mis sistemas de despliegue de desarrollo y control de calidad dependen en gran medida de SchemaTool. Podemos agradecer a una combinación de desarrolladores perezosos en Doctrine y sqlite3 por esta pequeña pepita de ciudad loca.
Esto inmediatamente provocó una búsqueda en Google. No me gusta pensar si no es necesario. ¿Qué encontré? Todo el mundo usa varchar. VARCHARS!?!? Yo tuve un ataque al corazón. Eso fue simplemente inaceptable.
Por lo tanto, ingresa decimal. Es perfecto. El tamaño de almacenamiento es variable y se almacena en binario, por lo que la indexación es súper rápida. Simplemente ajustamos la precisión decimal a cero y voilà. El ORM puede transferir esto a cualquier RDBMS, es lo suficientemente grande como para que no nos importe el problema firmado / no firmado no soportado y es muy rápido. decimal (20,0) debería manejar nuestro tamaño de facebook de dieciocho quintillones cuatrocientos cuarenta y cuatro mil setecientos cuarenta y cuatro billones setenta y tres mil setecientos nueve millones quinientos cincuenta mil seiscientos quince bastante bien.
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
Puedes, pero perderás la portabilidad. Use el atributo columnDefinition
y columnDefinition
como integer unsigned
. El código real depende de lo que estés usando.
columnDefinition: fragmento de SQL DDL que se inicia después del nombre de la columna y especifica la definición de columna completa (¡no portátil!). Este atributo permite hacer uso de funciones avanzadas de RMDBS. Sin embargo, debe hacer un uso cuidadoso de esta característica y las consecuencias. SchemaTool ya no detectará los cambios en la columna correctamente si usa "columnDefinition".
docs.doctrine-project.org/projects/doctrine1/en/latest/en/… y la docs.doctrine-project.org/projects/doctrine1/en/latest/en/… Doctrine 2 dicen que puedes hacerlo de esta manera:
Anotaciones de PHP:
/**
* @Column(type="integer", name="some_field" options={"unsigned":true})
*/
protected $someField;
Yaml: ( ver documentos )
MyEntity:
fields:
someField:
type: integer
column: some_field
options:
unsigned: true
Espero que esto ayude a alguien a ahorrar un tiempo;)
/** * @ORM/Column(name="id", type="integer", options={"unsigned"=true}) */
No hay lugar en el documento (que he visto) que hable de esto, pero funciona.
Actualizar
Definición en Yaml (a partir de 2.4 para clave primaria)
id:
type: integer
options:
unsigned: true