Doble Consulta Funtion Search ?

esta es mi funtion search de mi modelo GeTeslv




public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.




		$criteria=new CDbCriteria;


		$criteria->compare('vehr_codi',$this->vehr_codi);

		$criteria->compare('eslv_codi',$this->eslv_codi);

		$criteria->compare('eslv_clas',$this->eslv_clas,true);

		$criteria->compare('eslv_tipo',$this->eslv_tipo,true);

		$criteria->compare('eslv_anio',$this->eslv_anio);

		$criteria->compare('eslv_valo',$this->eslv_valo,true);

		$criteria->compare('eslv_fech',$this->eslv_fech,true);

		$criteria->compare('esta_codi',$this->esta_codi,true);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}



estoy logueado con un usuario "prueba", dicho usuario tiene un id que se consulta con "Yii::app()->user->id", ese id tiene una relacion en otro modelo "GeTpers" con un campo llamado "pers_auxi", el "pers_auxi" esta relacionado en un Modelo llamado "GeTvehr" con un campo llamado "pers_auxi" y luego relaciono vehr_codi(GeTvehr) con un campo vehr_codi(GeTeslv) …

{la relacion quedaria asi "mi id(Yii::app()->user->id)->pers_auxi(GeTpers)->pers_auxi(GeTvehr)->vehr_codi(GeTvehr)->vehr_codi(GeTeslv)"…

lo que deseo hacer es q en la funtion search de mi modelo GeTeslv solo muestre las entradas cuyo “vehr_codi” hallan sido agregados por el usuario con el cual estoy logeado :blink:

espero haberme hecho entender :D ajajaja

Pues la verdad es q no te he entendido mucho debido a los nombres q utilizas… DIOS MÍO!!!

De todas formas creo q te entendí q sólo quieres ver los registros de GeTeslv agregados por el usuario logueado. De todas formas ayudaría que postearas los modelos involucrados, ya que no sabemos si las relaciones son uno a uno, uno a muchos, …

En mi opinión deberías tener un campo en GeTeslv que identificara al usuario que insertó el registro. Supongo que será vehr_codi. Entonces deberías hacer lo siguiente:




$criteria->compare('vehr_codi',Yii::app()->user->id); // O getId() o lo que sea.



Si no es así y no tienes el identificador del usuario en el modelo, todo dependerá de como sean tus relaciones, pero hasta que nos las muestres pues poco podemos hacer.

Un saludo.

ajajaja si es un poco confuso pero si ya habia tomado el cuenta de hacerle un campo a la tabla sin embargo es que el modelo GeTeslv ya tiene relacion con GeTVehr y este a su vez se relaciona con GeTpers y este es donde esta la relación con el id de usuario osea hay alguna manera de llamar todas esas relaciones para hacer la comparacion ? :D




$usuario= UserCruge::model()->findByAttributes(array('iduser'=> Yii::app()->user->id));

$criteriav=new CDbCriteria;

$criteriav->condition = "pers_auxi=".$usuario->pers_auxi;

$vehiculo= GeTvehr::model()->findAll($criteriav);



con el codigo anterior lo que hago es traer todos los resgistros de GeTvehr que han sido ingresado por el usuari, ahora lo que necesito es q todos los resgitros de GeTvehr sean comparados con los de GeTeslv la llave foranea es vehr_codi … pero no se como hacer la comparacion entre los dos con los datos que recupero :confused:

Bueno pues ya decidí irme por la solución "mas rápida" y fue creándole un campo q guarde el id de la persona q lo creo pero de igual manera me interesaría saber si hay alguna forma de pudiese tomar la relación de una relación para poder hacer el filtro :confused:

Erick, te repito lo mismo, sin saber la cardinalidad de las relaciones poco te podemos ayudar.

Necesitaría saber si las relaciones son uno a uno, uno a muchos,…

Pero por supuesto se puede hacer sin añadir un campo usuario a la tabla GeTeslv utilizando las relaciones.

Lo que pasa es que dependiendo de la cardinalidad la relación será un array cuyos elementos sean las propiedades de la tabla relacionada, o un array cuyos elementos sean otros arrays con las propiedades de la tabla relacionada.

En cualquiera de los 2 casos yo crearía un objeto del modelo de usuarios con el id del usuario actual, con lo que ya tendremos todos los datos asociados (pq tenemos todos los modelos relacionados,no?). Nos interesarían los ids de los GeTeslv, no?. Pues los recogemos, y en la condición de búsqueda añadimos una addInCondition al CDbCriteria con estos ids y listo.

La diferencia sería q en lugar de un addInCondition añadiríamos una addCondition, y en el segundo caso habría que pasar todos los ids de GeTeslv a un String separados por ",".

Un saludo.

Debes aprender sobre el uso de relaciones entre tablas.

Primero necesitas definir tus relaciones en el modelo

En el modelo GeTeslv debes tener la relación


public function relations() {

	return array (

		'vehr_codi0'=>array(self::BELONGS_TO,'GeTvehr','vehr_codi'),

	);

}

En el modelo GeTvehr debes tener la relación


public function relations() {

	return array (

		'pers_auxi0'=>array(self::BELONGS_TO,'GeTpers','pers_auxi'),

	);

}

Y en el modelo GeTpers debes tener la relación

p


ublic function relations() {

	return array (

		'user_cruge0'=>array(self::HAS_ONE,'UserCruge','pers_auxi'),

	);

}

Y en el metodo search del modelo GeTeslv debes agregar las relaciones y la comparación al objeto criteria


$criteria->with=array('vehr_codi0.pers_auxi0.user_cruge0');

$criteria->compare('user_cruge0.iduser',Yii::app()->user->id);