Saludos a todos, tengo la siguiente inquietud y de seguro para los que empiezan en Yii (como yo) también será algo similar la duda.
Tengo la siguiente consulta SQL y quiero llevarla a la forma de codificar bajo Yii:
public function actionGrid()
{
$sLimit = "";
if (isset( $_POST['iDisplayStart'] ) && $_POST['iDisplayLength'] != '-1')
{
$sLimit = "LIMIT ".$_POST['iDisplayStart'].", ".$_POST['iDisplayLength'];
}
$sql = "SELECT
o.idoportunidad,
o.nombre,
o.creado_en,
o.observacion,
o.monto,
o.prioridad,
tip_o.descripcion AS operacion,
tip_i.descripcion AS inmueble,
u.username AS responsable
FROM
oportunidades o,
tipo_operaciones tip_o,
tipo_inmuebles tip_i,
usuarios u
WHERE
u.idusuario = o.idresponsable AND
tip_o.idtipooperacion = o.idtipooperacion AND
tip_i.idtipoinmueble = o.idtipoinmueble ";
$rawData=Yii::app()->db->createCommand($sql.$sLimit)->queryAll();
$nTotal=Yii::app()->db->createCommand($sql)->queryAll();
$nTotal=count($nTotal);
$aaData = array();
$mibase = Yii::app()->baseUrl . '/index.php?r=';
$path_img = Yii::app()->theme->baseUrl ."/img/";
foreach($rawData as $row) {
$str='<div class="btn-group">'.
'<a href="'.$mibase . 'oportunidades/update&id=' . $row['idoportunidad'].'" data-toggle="tooltip" title="Editar" class="btn btn-mini btn-success"><i class="icon-pencil"></i></a>'.
'<a href="'.$mibase . 'oportunidades/delete&id=' . $row['idoportunidad'].'" data-toggle="tooltip" title="Borrar" class="btn btn-mini btn-danger"><i class="icon-remove"></i></a>'.
'</div>';
if ($row['prioridad'] == "1") {
$pri='<img src="'.$path_img.'icons/priority-low.png" alt="Baja"/>';
}
if ($row['prioridad'] == "2") {
$pri='<img src="'.$path_img.'icons/priority-medium.png" alt="Media"/>';
}
if ($row['prioridad'] == "3") {
$pri='<img src="'.$path_img.'icons/priority-high.png" alt="Alta"/>';
}
$aaData[] = array(
$str,
$row['idoportunidad'],
'<a href="'.$mibase . 'oportunidades/view&id=' . $row['idoportunidad'].'">'.$row['nombre'],
$row['responsable'],
$row['creado_en'],
$row['operacion'],
$row['inmueble'],
$pri,
'<span class="label label-warning">'.$row['monto'].'</span>'
);
}
$aa = array(
'sEcho' => intval($_POST['sEcho']),
'iTotalRecords' => $nTotal,
'iTotalDisplayRecords' => $nTotal,
'aaData' => $aaData);
echo CJSON::encode($aa);
}
Me gustaría conocer como hacer ello pero “de la foma yii”. Tengo todas las relaciones hechas en los modelos correspondientes pero no se como utilizarlas para ahorrarme codigo innecesario. Mi duda es si lo que está dentro del “foreach” o la propia “consulta” se puede hacer de otra forma mejor, me explico: por ejemplo, dentro del foreach, en una de sus lineas (’<span class=“label label-warning”>’.$row[‘monto’].’</span>’) utilizo un “span” que no quiero utilizar, pues se ha de suponer que esas cosas deben ir en la vista, estoy trabajando con un tema y en el futuro cuando quiera cambiar el tema esa parte tambien tendré que cambiarla o duplicar la funcion y llamarla con otro nombre, cosa que no debería suceder…
Me gustaría saber tambien como "destripar" la consulta para evitarme el comando
"createCommand($sql.$sLimit)", "queryAll", etc. En fin, conocer otra forma de hacer ello "al estilo Yii".
Espero haberme explicado bien.
Alguna alma caritativa,maestro y conocedor de la materia que por favor me guie para ver la luz al final del camino jeje
Gracias de antemano por las respuestas.