Gracias por tu seguimiento Javierlog, pero sigo con problemas
.
Entiendo que haciendo lo que me dices me queda esto:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'material-grid',
'dataProvider'=>$model->relSearch(),
'filter'=>$model,
'columns'=>array(
'nombre',
'codigo',
'numero_sn',
'cantidad_minima_requerida',
array('name'=>'ubicacion_search', 'value'=>'$data->id_ubicacion0->ubicacion','type'=>'text'),
'sumEntradasMateriales',
'sumSalidasMateriales',
'materialTotal',array(
'class'=>'CButtonColumn',
),
),
)); ?>
Y en el modelo.
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'sumEntradasMateriales'=>array(self::STAT, 'entrada_material', 'id_material', 'select'=>'SUM(cantidad)'),
'sumSalidasMateriales'=>array(self::STAT, 'salida_material', 'id_material', 'select'=>'SUM(cantidad)'),
'entrada_materials' => array(self::HAS_MANY, 'entrada_material', 'id_material'),
'id_ubicacion0' => array(self::BELONGS_TO, 'ubicacion', 'id_ubicacion'),
'salida_materials' => array(self::HAS_MANY, 'salida_material', 'id_material'),
);
}
y esto
public function relSearch(){
$criteria=new CDbCriteria;
$criteria->select ="(sumEntradasMateriales.entradasTotal - sumSalidasMateriales.salidasTotal) as materialTotal";
$criteria->compare('id',$this->id);
$criteria->compare('nombre',$this->nombre,true);
$criteria->compare('codigo',$this->codigo,true);
$criteria->compare('numero_sn',$this->numero_sn,true);
$criteria->compare('cantidad_minima_requerida',$this->cantidad_minima_requerida);
$criteria->compare('caracteristicas',$this->caracteristicas,true);
$criteria->compare('observaciones',$this->observaciones,true);
$criteria->compare('id_ubicacion',$this->id_ubicacion);
$criteria->with=array('id_ubicacion0',
'sumEntradasMateriales' => array('select' => 'SUM(cantidad) as entradasTotal'),
'sumSalidasMateriales' => array('select' => 'SUM(cantidad) as salidasTotal'),);
return new CActiveDataProvider('material', array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'materialTotal'=>array(
'asc'=>'materialTotal',
'desc'=>'materialTotal DESC'
),
),
)
));
}
Pero me da este error:
CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘sumEntradasMateriales.entradasTotal’ in ‘field list’. The SQL statement executed was: SELECT (sumEntradasMateriales.entradasTotal - sumSalidasMateriales.salidasTotal) as materialTotal, t
.id
AS t0_c0
, id_ubicacion0
.id
AS t1_c0
, id_ubicacion0
.ubicacion
AS t1_c1
FROM material
t
LEFT OUTER JOIN ubicacion
id_ubicacion0
ON (t
.id_ubicacion
=id_ubicacion0
.id
) LIMIT 10
Por lo que veo estoy haciendo mal el cruce de tablas, pero he hecho diferentes pruebas y no acierto.
¿Alguna idea?
¡Gracias y saludos!