error-boolean-integer-yii-postgres

El problema de los booleanos en Yii usando postgreSQL

Actualmente Yii en su versión mas reciente (1.1.14) y por lo menos desde la versión 1.0, trae por defecto un inconveniente para el trabajo de inserción en tipos de datos BOOLEAN en el motor de datos PostgreSQL. A continuación un breve recorrido de la problemática, incluyendo la resolución del problema. El ejemplo es en base a: Debian Wheezy, Apache 2.2.22, PHP 5.4.4, PostgreSQL 9.2, Yii 1.1.14.

.

CREATE TABLE tipo_de_datos
(
id integer NOT NULL DEFAULT nextval(‘»tipo-de-datos_id_seq»‘::regclass), — clave primaria
nombre character varying(60) NOT NULL, — campo tipo character varying de 60
valido boolean NOT NULL DEFAULT true, — tipo boolean TRUE o FALSE
creado_en timestamp without time zone, — fecha y hora de creacion del registro timestamp without time zone
actualizado_en timestamp without time zone NOT NULL DEFAULT now(), — fecha y hora de creacion del registro timestamp without time zone
CONSTRAINT pk_id PRIMARY KEY (id)
)

boolean-yii-postgres
boolean-yii-postgres

E.

..:: El error y objetivo de esta entrada:

CDbCommand failed to execute the SQL statement: SQLSTATE[42804]: Datatype mismatch: 7 ERROR: la columna «valido» es de tipo boolean pero la expresión es de tipo integer
LINE 1: … «nombre», «creado_en», «actualizado_en») VALUES (1, ‘prueba…
^
HINT: Necesitará reescribir la expresión o aplicarle una conversión de tipo.. The SQL statement executed was: INSERT INTO «tipo_de_datos» («valido», «nombre», «creado_en», «actualizado_en») VALUES (:yp0, :yp1, :yp2, :yp3)

.

error-boolean-integer-yii-postgres
error-boolean-integer-yii-postgres

.

..:: Solución

Comentar la linea: ‘emulatePrepare’ => true, en protected/config/main.php

Para saber mas sobre emulatePrepare y el por que quitarlo visite los siguientes enlaces:

http://www.yiiframework.com/doc/api/1.1/CDbConnection#emulatePrepare-detail

http://www.yiiframework.com/forum/index.php/topic/33152-database-error-convert-boolean-to-integer/

https://bugs.php.net/bug.php?id=62593

Una vez comentada dicha linea (por defecto en el config/main.php en la linea 57) debería guardar el registro.

.

boolean-yii
#Yii guardando booleano en postgreSQL

1 comentario en “El problema de los booleanos en Yii usando postgreSQL”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *