En este capítulo miraremos más de cerca los ipos de columnas disponibles para usted en Propel. Los tipos de columnas que eliga afectaran el SQL que es generado para su RDBMS y en algunos casos el comportamiento de la clase generada OM . Los tipos de columnas en Propel son mapeadas directamente en los tipos de columnas disponibles en Creole, La capa de abstracción de la base de datos usada por Propel, y los tipos de columna de Creole están basados sobre una versión específica de los tipos JDBC.
El generador de clases de Propel traduce los tipos de columnas genericos en tipos de columnas nativos para su RDBMS, y las clases del generador OM y el framework de ejecución de propel aseguran que esos datos son corre tamente transformados por ello que sus llamados de script no necesitan por si mismo tratar la implementacién de la base de datos.
Hay un tipo simple boolean en propel:
Este tipo es usado para representar valore de False/Veradero. En bases de datos que no tienen columnas con tipos de datos nativo BOOLEAN/BIT, un INTEGER (o SMALLINT) será en lugar de eso usa (0 = falso, 1 = verdadero).
<table name="bool_test"> <column name="boolval" type="BOOLEAN" defaultValue="true"/> </table>
En PostgreSQL, por ejemplo, esto generará:
CREATE TABLE bool_test ( boolval bit NOT NULL default 't' );
El método accessor en la clase generada OM (ej. getBoolval()) siempre retornará valores tipo boolean, indiferente de la implementación de la base de datos.
Hay varios tipos numéricos disponibles:
Usted puede usar los atributos size y scale para aplicar a los tipos de soluna numéricos. Si estos son incluidos en los archivos generados SQL dependerá de su RDBMS.
<table name="num_test"> <column name="num" type="FLOAT" size="10" scale="2"/> </table>
En MySQL, por ejemplo, esto generará:
CREATE TABLE num_test ( num FLOAT(10,2) NOT NULL ) Type=MyISAM;
El tipo numérico sólo afecta el SQL generado y no la clase generada OM.
Note que usted puede muy bien abilitar el almacenamiento de números con gran precisión en su base de datos que puede introducir en PHP. revise los ajustes de precisión en su archivo php.ini si encuentra truncación.
Hay varios tipos de string en Propel:
Estas columnas son equivalentes para RDBMS. CHAR es para representar longitud de strings ajustados, mientras los strings VARCHAR pueden varias en tamaņo. Usted puede especificar un atributo size para ambos tipos. Generalmente el atributo size para LONGVARCHAR será ignorado. algunas bases de datos (ej. MySQL, PostgreSQL, Microsoft SQL Server) usa un tipo de dato TEXT para LONGVARCHAR.
Las columnas de estos tipos siempre se almacenan como valores string y retornarán valores tipo string. Note que los valores retornados siempre tendrán alguna huella con espacio en blanco arreglado. Algunas RDBMS harán esto automaticamente (ej. MySQL) mientras que otras no (ej. PostgreSQL).
LOB Locator OBject.(Localizador de OBjeto) hay 2 tipos de columna LOB en Propel:
Estos tipos de datosmerecen una atención especial porque son manejadas lijeramente diferente desde otros tipos de datos en Propel. Los resultados para los tipos de datosr LOB son retornados como objetos de tipo creole.util.Blob o creole.util.Clob, dependiendo del tipo de columna. Estas clases proveen algunos métodos útiles (ej. para escribir a un archivo o descargado a un buffer); Ellos tambiéno proveen un método __toString() con el que usted puede llamar código, escoger o ignorar los objetos. Nota: en PHP5.0.0RC1 en el método __toString() la invocación automática para el casting(string) ha sido desabiitado por ahora, usted debe explícitamente invocar el método __toString()sobre objetos.
Mire el siguiente esquema de ejemplo:
<table name="lob_test"> <column name="photo" type="BLOB"/> </table>
El llamado a código PHP necesita hacer uns casting de resultados de estas columnas a string explícitamente (para llamar al método __toString() ) - por ahora debe explícitamente llamar al método __toString() en PHP.:
$lob = LobTestPeer::doSelectOne(new Criteria()); $bits = $lob->getPhoto()->__toString(); // yuk, we know; convince php devs to restore automatic __toString()
... o puede llamar el método Lob::getContents()directamente:
$bits = $lob->getPhoto()->getContents();
... o puede usar el método utilitario para guardarlo en un archivo:
$lob->getPhoto()->writeToFile('/tmp/photo.gif');
... o puede lanzar los contenidos al buffer:
$lob->getPhoto()->dump();
Los tipos de columna fecha y hora en Propel son:
La mayoría de las bases de datos tiene equivalaencias directas para estos tipos en Propel. No tiene valor que para MySQL el tipo de dato TIMESTAMP actualmente mapee a DATETIME. La capa Creole actualmente transforma fechas y horas dentro de los valores por defecto para su país, proporcionando consistencia a través de terminaciones anteriores en bases de datos.
<table name="date_test"> <column name="birth_date" type="DATE"/> <column name="birth_time" type="TIME"/> <column name="updated" type="TIMESTAMP"/> </table>
El siguiente es un ejemplo de código PHP:
print $obj->getBirthDate() . "\n"; print $obj->getBirthTime() . "\n"; print $obj->getUpdate() . "\n";
Debería tener la siguiente salida en un sistema con configuración en_US:
03/02/1998 12:34:23 AM 2003-12-21 18:32:01
... pero la siguiente salida en un sistema con configuración de_DE:
02.03.1998 00:34:23 2003-12-21 18:32:01
Note que usando la función de PHP setlocale() cambiará el valor de retorno de accsesos para las columnas DATE o TIME . El valor TIMESTAMP es formateado usando ISO 8601 indiferente de la configuración local.
Importantemente, usted puede ahora también passar una fecha en format string al método asesor para las columnas fecha/hora columns. Incluso puede pasar NULL para tener los métodos y retornar el integrador unix timestamp.
print $obj->getBirthDate('n/j') . "\n"; print $obj->getBirthTime('%X') . "\n"; print $obj->getUpdate(null) . "\n";
Debería obtener la siguiente salida en un sistema con configuración en_US(en este ejemplo, la configuración local sólo afecta el llamado getBirthTime() , el cual es usa un configuracién local sensitiva strftime()-tipo de formato string):
3/2 12:34:23 AM 1072049521