Yii Framework Forum: Problema Con Retorno De Funcion Postgres Con Carraydataprovider - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema Con Retorno De Funcion Postgres Con Carraydataprovider Rate Topic: -----

#1 User is offline   Osniel Fari 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 29-November 13

Posted 29 November 2013 - 02:19 PM

Saludos ,soy nuevo en Yii,estoy usando SGB Postgres ,tengo una funcion en postgres de la siguiente manera
CREATE OR REPLACE FUNCTION public.palabra_acepciones (
  id integer
)
RETURNS TABLE (
  acepcion varchar,
  tomo varchar
) AS
$body$
SELECT  acepcion.acepcion, obra_completa.tomo
FROM acepcion, obra_completa, palabra, obra, acepcion_obra
WHERE palabra.id=$1
AND acepcion.id_palabra=palabra.id
AND obra_completa.id=obra.id_obracompleta
AND acepcion.id=acepcion_obra.id_acepcion
AND obra.id=acepcion_obra.id_obra;
$body$
LANGUAGE 'sql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1000;

no es nada complicado me retorna una tabla con dos columnas ...ahora cuando ejecuto
$list=Yii::app()->db->createCommand("select palabra_acepciones('$id')")->queryAll();
$dataProvider=new CArrayDataProvider($list);//esto es básico ,sin muchas complicaciones

obtengo
CArrayDataProvider Object
(
    [keyField] => id
    [rawData] => Array
        (
            [0] => Array
                (
                    [palabra_acepciones] => ("lorem itsum dolor ",tomo1)
                )

        )

    [caseSensitiveSort] => 1
    [_id:private] => id
    [_data:private] => 
    [_keys:private] => 
    [_totalItemCount:private] => 
    [_sort:private] => 
    [_pagination:private] => 
    [_e:private] => 
    [_m:private] => 
)

como ven el rowData esta algo raro porque,no me esta devolviendo el array indexado por el nombre de la funcion y no por los campos de la funcion ...
ahora si repito lo mismo pero de esta forma ..
$list=Yii::app()->db->createCommand("select distinct acepcion.acepcion, obra_completa.tomo 
											FROM acepcion, obra_completa, palabra, obra, acepcion_obra
											WHERE palabra.id='$id'
											AND acepcion.id_palabra=palabra.id
											AND obra_completa.id=obra.id_obracompleta
											AND acepcion.id=acepcion_obra.id_acepcion
											AND obra.id=acepcion_obra.id_obra")->queryAll();
		$dataProvider=new CArrayDataProvider($list);  

obtengo como salida
CArrayDataProvider Object
(
    [keyField] => id
    [rawData] => Array
        (
            [0] => Array
                (
                    [acepcion] => lorem itsum dolor
                    [tomo] => tomo1
                )

        )

    [caseSensitiveSort] => 1
    [_id:private] => 
    [_data:private] => 
    [_keys:private] => 
    [_totalItemCount:private] => 
    [_sort:private] => 
    [_pagination:private] => 
    [_e:private] => 
    [_m:private] => 
)

que es lo que esta mal? la funcion en postgres? Uso el EMS Manager for Postgres y me devuelve la tabla bien..
0

#2 User is offline   xavieremv 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 19-September 12

Posted 29 November 2013 - 04:21 PM

Es la función de postgresql la consulta te la retorna tal cual como la imprimes.

Lo extraño es que EMS Manager for Postgres te la muestra bien, por lo menos pgadmin o phppgadmin te mostraría el resultado como lo esta haciendo yii
0

#3 User is offline   Osniel Fari 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 29-November 13

Posted 30 November 2013 - 03:50 PM

View Postxavieremv, on 29 November 2013 - 04:21 PM, said:

Es la función de postgresql la consulta te la retorna tal cual como la imprimes.

Lo extraño es que EMS Manager for Postgres te la muestra bien, por lo menos pgadmin o phppgadmin te mostraría el resultado como lo esta haciendo yii

100% de razon Junior ,no habia probado en otro soft la consulta ,pobre en PGADMIN y exactamente ya caigo en que el error esta en la funcion ,ya eso es tema para otro post ,soy nuevo en postgres ,y lo curioso es que hago la consulta en mysql basandome en las mismas tablas y me funciona perfectamente ...tengo que profundizar un poco mas en el tema de las funciones en postgres ..vengo un poco mas acomodado con el concepto de procedures en MySql.Saludos y Muchas gracias
.
0

#4 User is offline   xavieremv 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 19-September 12

Posted 02 December 2013 - 08:39 AM

View PostOsniel Fari, on 30 November 2013 - 03:50 PM, said:

100% de razon Junior ,no habia probado en otro soft la consulta ,pobre en PGADMIN y exactamente ya caigo en que el error esta en la funcion ,ya eso es tema para otro post ,soy nuevo en postgres ,y lo curioso es que hago la consulta en mysql basandome en las mismas tablas y me funciona perfectamente ...tengo que profundizar un poco mas en el tema de las funciones en postgres ..vengo un poco mas acomodado con el concepto de procedures en MySql.Saludos y Muchas gracias
.


Postgres tiene sus trucos pero una vez que le agarres el gusto no lo querrás dejar.

si una procedimiento en postgres te retorna uno o varios registro tipo tabla tendrías que "castearlo" para que te muestra el resultado bien, ejemplo:

SELECT * FROM palabra_acepciones(1) as return(varchar, varchar)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users