Hola:
Por favor necesito ayuda con este problema: Estoy escribiendo una función php que devuelve
un arreglo de datos como resultado de una consulta usando AR relacional. Específicamente estoy
usando la clase CActiveDataProvider, y como parámetros de la función tengo el nombre del modelo
y un objeto de tipo CDbCriteria para personalizar la consulta.
El problema está luego de obtener los datos a través del método CActiveDataProvider::getData,
el cual devuelve un arreglo de objetos del modelo correspondiente al parámetro $nombreModelo,
en mi caso necesito devolver un arreglo bidimensional con todos los valores de la consulta, y
sólo he logrado hacerlo con las columnas correspondientes a la tabla del modelo, y no de toda la
consulta, para esclarecer escribo el código de la función:
public function obtenerDatos($nombreModelo, $criteria)
{
// creo el DataProvider
$dataProvider=new CActiveDataProvider($nombreModelo);
$dataProvider->criteria = $criteria;
// obtengo los datos
$modelArray = $dataProvider->getData(true);
// recorro los datos para copiarlos hacia el arreglo bidimencional $dat
$dat = array();
foreach ($modelArray as $value)
{
/* OJO - AQUI ESTA EL PROBLEMA: AL OBTENER LOS DATOS DE CADA FILA, SOLO OBTENGO
LAS COLUMNAS CORRESPONDIENTES AL MODELO ESPECIFICADO EN LOS PARAMETROS */
$modelAttrs = $value->attributes;
$model = $modelAttrs;
$dat[] = $model;
}
// devuelvo los datos y el total del numero de filas
$total = $dataProvider->totalItemCount;
echo json_encode(array('datos'=>$dat,'total'=>$total));
}
Esta función trabaja bien cuando se quiere solamente listar los datos de un modelo,
sin embargo cuando se desea listar un resultado más complejo, por ejemplo la union de este modelo
con una relacion especificada con un ‘with’ en el parápetro $criteria, entonces no funciona bien pues
sólo se devuelven los datos relativos a las columnas del modelo $nombreModelo.
El problema debe estar el la línea de código dentro del foreach:
$modelAttrs = $value->attributes;
donde intento copiar toda una fila de los datos obtenidos por $dataProvider->getData(true);
entonces esa sería mi pregunta:
¿Cómo obtengo todos los datos de una fila en CActiveDataProvider::getData?
Mis disculpas por la lagra explicación.
Agradeceré mucho cualquier respuesta o sugerencia.
Gracias de antemano y tengan un exelente día:
Yordanis.