Vista (View)

Hola a todos, alguien puede ayudarme a llevar los resultados de una consulta que he ejecutado en un controlador a la vista(index-view) la consulta la realice con el DAO inyectando mi codigo sql ahora necesito llevarlo a la vista.

Gracias, espero puedan ayudarme.

Supongamos que haces la consulta y lo metes el resultado en la variable $datos (muchas filas)

controlador




public function actionAlgo(){

$datos = //ejecutas la consulta sql;

$this->render('mivista', array(

'resultado' => $datos

));

}



La vista (mivista.php)




foreach ($resultado as $res)

echo $res->atributoQueQuieresMostrar;

}



Obviamente, todo dentro del html que quieras generar y adornado como veas… pero básicamente es eso.

Gracias chux, voy a buscar la forma de aplicarlo, antes una pregunta…

trabajando de esta forma debo utilizar los modelos de las tablas???

trabajo en un proyecto que tiene consultas muy complejas pero que ya están hechas para otra aplicación, necesito es adaptarlas al framework… así que estoy estudiando eso.

Lo ideal es que si. Las consultas en el modelo, la lógica en el controlador y la presentación de los datos en la vista.

Tal cual lo tienes, en el controlador sería algo del palo:




$datos = Modelo::model()->findAll(); // para recuperar todos

//o

$datos = Modelo::tuConsultaPersonalizada(); // para un método estático con la consulta que hayas hecho a mano



Chux, de nuevo muchas gracias por tu gran ayuda, esto esta funcionando, pero me intriga algo mas… quiero personalizar mi tabla en las vistas, pues estoy imprimiendo una tabla normal y quiero hacer uso de las herramientas que provee yii como por ejemplo el widget.

Que widget? por ejemplo, el clistview le puedes pasar la variable $datos como si un dataprovider se tratase. El grid igual.

Mira la documentación y si tuvieras algún problema simplemente avisa.

Saludos

Ya pude implementar mi modelo-vista-controlador para mi consulta, pero el tiempo de respuesta es mucho mas largo que cuando lo hacia del controlador para la vista… porque pasará esto??

en cuanto a los widget, enseguida voy a estudiarlo.

Gracias.

No entiendo lo del tiempo de respuesta más largo… dame alguna pista más. Debes tardar lo mismo (la diferencia es inapreciable). Pega algo de código a ver.

Dentro de mi modelo tengo lo siguiente:

public function Consultar()

{

$conexion = Yii::app()->db ;

$sql = "SELECT TRA_ITINERARIOS.ID, TRA_ITINERARIOS.VE_PLACA, GEN_MUNICIPIOS.NOMBRE

FROM TRA_ITINERARIOS, GEN_MUNICIPIOS

WHERE TRA_ITINERARIOS.MU_ORIGEN = GEN_MUNICIPIOS.CODIGO

AND VE_PLACA = ‘XMA943’";

$dataReader = $conexion -> createCommand($sql) -> query();

return $dataReader;

}

Dentro de mi controlador lo siguiente:

public function actionIndex()

{

$model=new TRAITINERARIOS;

$model->unsetAttributes();

$this->render (‘index’, array(‘resultado’=> $model->Consultar()));

}

y en mi vista lo siguiente:

<table>

<tr>

<td>ID</td>

<td>VE_PLACA</td>

<td>NOMBRE</td>

</tr>

<?php

//echo sizeof($resultado);

foreach($resultado as $row)

{

echo "<tr><td>".($row["ID"])."</td>";

echo "<td>".($row ["VE_PLACA"])."</td>";

echo "<td>".($row ["NOMBRE"])."</td></tr>";

}

?>

</table>

de esta forma el proceso en tiempo es mucho mas largo

puedes decirme cuanto tarda cada uno? de cuantos registros estamos hablando (cuantas filas devuelve la consulta)?

estamos hablando de 3 columnas y 227 filas… la consulta tarda unos 5 segundos mas que cuando la hacia solo con el controlador y la vista. (aunque supongo que es porque el modelo hace todas la validaciones de las reglas y características de la db).

Podrías ayudarme a implementar un ClistView?? :)

Gracias chux

Por favor, activa el webloroute en tu main para que te muestre cuanto tarda cada cosa y ver donde está el cuello de botella.

http://www.yiiframework.com/doc/api/1.1/CListView justo al principio tienes un ejemplo de implementación

Como puedo activarlo??




'log'=>array(

    'class'=>'CLogRouter',

    'routes'=>array(

        'class'=>'CWebLogRoute',

    ),

)

(...)



y como puedo probar lo que me dices?

Cuando avtivas eso, en el pié de la página te va a salir todo lo que ha hecho internamente el framework y cuanto tiempo ha tardado cada cosa. 5 segundos para una consulta como lo que tu dices no es normal.

Tardo 9seg aproximadamente mientras que de la otra forma, tarda 2seg

y veo que hay un Querying SQL 3 veces en los diferentes archivos de MVC y ahí tarda 7 segundos.

7 segundos una simple consulta? ahí hay algo que no marcha…

que consulta tarda 7 segundos?

doy por hecho que usas myql, ejecuta esa consulta directamente a ver cuanto tarda