Consulta con Criteria

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:

  1. No estén eliminados

  2. 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…

Espero sugerencias Gracias!! :)

Buenas Siobeth.

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.

Saludos.

Hola … Gracias por responder… Efectivamente tengo las relaciones en ambos modelos…

Interpretando tu codigo lo probe y nada… No se que estare haciendo mal…

En el modelo Datos

la relacion


public function relations()

	{

	    'idresumen' => array(self::HAS_MANY, 'resumen', 'codigo'),

		);

	}

En el Search del Modelo Datos


public function search()

	{

      $var = Yii::app()->request->getParam('ch');  

            if ($var == 'proc'){

                $criteria=new CDbCriteria(); 

                $criteria->with=array('idresumen');  

                $criteria->addCondition('publicado!=:culm AND eliminado!=:anul'); 

                $criteria->params=array(':culm'=>1, ':anul'=>1);

                $resumen = datos::model()->findAll($criteria); 

                $sort= new CSort();

                $sort->defaultOrder = 'id desc';     //'id asc / desc'

                return $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(

                'pagination'=>array('pageSize'=>20,

                    ),

                'criteria'=>$resumen,'sort'=>$sort

		));

             }

Me genera el siguiente error:

Propiedad "CDbCriteria"."0" no se encuentra definida.

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.

saludos.

Holaaa…

Aplique lo que me dijistes y nada :(


   if ($var == 'proc'){

                $criteria=new CDbCriteria(); 

                $criteria->with=array('idresumen');  

                $criteria->condition = "eliminado=:anul";

                $criteria->addCondition('publicado=:culm'); 

                $criteria->params=array(':culm'=>0, ':anul'=>0);

                $resumen = datos::model()->findAll($criteria); 

//              print_r($resumen);

                

                $sort= new CSort();

                $sort->defaultOrder = 'id desc';     //'id asc / desc'

                return $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(

                'pagination'=>array('pageSize'=>20,

                    ),

                'criteria'=>$resumen,'sort'=>$sort

		));

             }

aplique el print_r a resumen y no me muestra los registros …

y ejecutando todo el codigo igual me sigue dando el error Propiedad "CDbCriteria"."0" no se encuentra definida.

te adjunto pantalla del print_r y el error…

Alguna otra idea??.. Gracias de antemano…

Hola Siobeth.

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 



Intenta esta opción, quedo atento.

Saludos.

Nada…:( :(

Me dice que Tabla "datos" no contiene la columna "publicado".

y le quito la condicion del publicado y me sigue saliendo el error:

Propiedad "CDbCriteria"."0" no se encuentra definida.

Ya casi pierdo la paciencia jajaja…

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?

Podrias mostrarme toda la pagina del error…

Quedo atento.

Si efectivamente es cuando llamo al admin de datos … te adjunto pantalla del error del print_r($resumen)

Hola gifrancohe … Nada que he podido solucionar con la consulta… :(

Hola Siobeth

Estuve unos dias fuera, retomando, una pregunta. ¿Si dejas la funcion Search() como la tenias en el primer post que hiciste, la vista admin funciona?