Buenos Días Comunidad!!Tengo el pequeño inconveniente a ver si me pueden ayudar…
Tengo dos tablas
Datos
-Codigo
-Eliminado -> (1/0)
…
Resumen
-Codigo
-Publicado -> (1/0)
…
Necesito que en el admin de Datos mostrar la información según la elección, si eligen en el menú En Proceso deben mostrar los registros que:
No estén eliminados
No estén publicados
El inconveniente es que no logro realizar la consulta en el Criteria para que me traiga los registros ya que la condición para saber si NO están publicados están en otra tabla…
hasta ahora tengo lo siguiente en el Modelo de Datos
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$var = Yii::app()->request->getParam('ch');
if ($var == 'proc'){
$criteria=new CDbCriteria;
$criteria->condition = "check_adc!=:eliminada" ;
$criteria->params = array(':eliminada'=>1);
$sort= new CSort();
$sort->defaultOrder = 'id desc'; //'id asc / desc'
return $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(
'pagination'=>array('pageSize'=>20,
),
'criteria'=>$criteria,'sort'=>$sort
));
}
Hasta acá solo filtro los registros sin los eliminados… me faltaría sin lo publicado…
Segun lo que entiendo necesitas usar la relacion que exista entre las tablas, de esta forma podrias consultar datos de ambas tablas sin probelma alguno. Debes revisar las relations entre tus modelos y usar estas en la construccion del criteria.
Te dejo un ejemplo para que te hagas la idea de como hacerlo.
Esta es la relacion en el modelo movimiento (Para este ejemplo).
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(
'clienteIdcliente' => array(self::BELONGS_TO, 'Cliente', 'cliente_idcliente'),
)
}
Y aqui un ejemplo para el Criteria.
$attribs = array('generada' => 0,'tipopublicacion_idtipopublicacion' => $publicacion, 'recibocaja' => 1 );
$criteria = new CDbCriteria();
$criteria->with=array('clienteIdcliente');//Para este ejemplo, esta es la relacion entre la tabla cliente y movimiento
$criteria->addBetweenCondition('fechapago', $fechaini, $fechafin);
$criteria->addCondition('tipocliente_idtipocliente=1'); // y aqui puedo usar conditions con campos de la tabla clientes
$movimiento = Movimiento::model()->findAllByAttributes($attribs,$criteria); // La consulta es a la tabla movimientos
De esta forma podrias construir tu criteria de acuerdo a campos que tengas en otras tablas.
Y que tal si intentas separar las condition’s, entonces en una de las condiciones pones la de la tabla datos y en la otra condicion pones la de la tabla resumen.
Por ejemplo:
$criteria=new CDbCriteria();
$criteria->with=array('idresumen');
$criteria->contition = "eliminado=:anul";
$criteria->addCondition('publicado=:culm');
$criteria->params=array(':culm'=>0, ':anul'=>0); //Intenta trabajar con los cero para que no tengas que negar la expresion
$resumen = datos::model()->findAll($criteria);
Cuentame como sale la consulta, he intenta hacer un var_dump o un print_r de $resumen para saber que datos esta cargando.
Que tal si intentamos construir la $criteria de esta forma:
$attribs = array('eliminado' => 0, 'publicado' => 0);//
$criteria=new CDbCriteria();
$criteria->with=array('idresumen');
$resumen = datos::model()->findAll($attribs,$criteria);
echo "<pre>"; // De esta forma hace mejor la impresion el print_r
print_r($resumen);
echo "</pre>"
die();//Este es para interrumpir la ejecuccion
Ok dejalo como estaba, que el problema no es el criteria como tal, el problema esta en que el CGridView estan intentando ingresar a una propiedad que no esta definida, puedes dejarlo de esta forma y mostrarme que imprime el print_r.
$criteria=new CDbCriteria();
$criteria->with=array('idresumen');
$criteria->contition = "eliminado=:anul";
$criteria->addCondition('publicado=:culm');
$criteria->params=array(':culm'=>0, ':anul'=>0); //Intenta trabajar con los cero para que no tengas que negar la expresion
$resumen = datos::model()->findAll($criteria);
echo "<pre>"; // De esta forma hace mejor la impresion el print_r
print_r($resumen);
echo "</pre>"
die();//Este es para interrumpir la ejecuccion
Y algo mas el error te sale cuando intentas ingresar al Admin de Datos?