Problema Con Cgridview

Hola que tal amigos? tengo un problema con el cgridview a la hora de usar el input search con un campo relacionado … Trate de seguir el ejemplo del Cookbook pero no me funciona bien, solo funciona el sort pero el search no sirve, aca les dejo mi código fuente y adjunto el modelo de la base de datos 4759

base de datos.png
pastebin(punto)com/hLrAVUwU pastebin(punto)com/K4vW0MRF se agradece cualquier ayuda

nota: es mi primer post y no me dejan agregar links por eso puse lo de (punto)

Buenas.

Entiendo q el campo q tienes en la caja de texto de búsqueda del gridview se refiere a un campo q no está en la tabla principal. Por ejemplo si en la tabla principal tuvieses un cambo ariculo_id, tu mostrarías en el grid el campo nombre_articulo,no?

Lo q tienes que hacer es preparar tu modelo para eso:

1- Declaras la propiedad "nombre_articulo" en tu modelo:




class miClase extends CActiveRecord

{

    public $nombre_articulo;



2- Lo añades a las rules:




array('nombre_articulo', 'safe', 'on'=>'search'),



3- Y modificas el search:




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

$criteria->compare('nombreRelacion_con_articulos.nombre_articulo',$this->nombre_articulo,true);



Y creo q no se me olvida nada.

Un saludo.

Gracias lagogz :D eso era lo que necesitaba

Hola amigos! tengo un problema parecido!.. tengo una relación entre dos tablas!. claro con un campo "cod_prov" y en ves de trabajar con ese campo id quiero trabajar con el campo "razon_social"!.. se supone que esa solucion que le das al amigo debería funcionarme a mi pero que va el campo "razon_social" siempre queda vacio cuando muestro y en la busqueda da error X_X ve el cod:

class RegEntrada extends CActiveRecord

{

[color="#FF0000"] public $razon_social; //tu paso 1[/color]

public function rules()

{


	return array(


		array('cantidad_ent, cod_prov, cod_material', 'numerical', 'integerOnly'=>true),


		array('f_entrada', 'safe'),

[color="#FF0000"] array(‘razon_social’, ‘safe’), //PASO 2

                    array('razon_social', 'safe', 'on'=>'search'),    //PASO 2[/color]


		array('cod_ent, f_entrada, cantidad_ent, cod_prov, cod_material', 'numerical', 'on'=>'search'),


	);


}

public function relations() // la relacion con la otra tabla

{


	return array(


		[color="#FF0000"]'codProv' => array(self::BELONGS_TO, 'Proveedores', 'cod_prov'),[/color]

public function search() //paso 3

{

[color="#FF0000"] $criteria=new CDbCriteria;

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


            $criteria->compare('codProv.razon_social',$this->razon_social,true);[/color]


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


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


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


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


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


	


	return new CActiveDataProvider($this, array(


		'criteria'=>$criteria,


	));


}

y mi vista _view que es donde creo que tengo el error!

<b><?php echo CHtml::encode($data->getAttributeLabel('razon_social')); ?>:</b>


 [color="#FF0000"]<?php echo CHtml::encode($data->razon_social); ?> [/color]// en esta linea es q creo tener el error y e intentado con ($data->codProv->razon_social) y nada!... 


<br />

Pero tú aquí no tienes un CGridView.

Cómo envías tu petición de búsqueda? Te falta ese código. O lo haces mediante un formulario o mediante AJAX/JS.

Un saludo.

estoy en un caso parecido, pero el problema es que el elemento por el que relaciona la 3ra tabla con la principal tambien lo muestro en el grid y necesito filtrar por el , asi que suponiendo de qu sea de esta manera me cae en conflicto, ya que me filtra por el campo rela cion y no por el nuevo que agregué

nuelma no ha contestado así q te contesto a ti, epulgaron.

Si no me muestras tu código es difícil ayudar, pero lo intentaré.

En tu caso sería igual q el caso q yo expliqué con una pequeña diferencia en el search:




$criteria->with = array('relacion1', 'relacion1.relacion2'); 

$criteria->compare('relacion2.campo3',$this->campo3,true);



relacion1 sería la relación entre la tabla1 y la tabla2, y relacion2 sería la relación entre la tabla2 y la tabla3. campo3 sería el valor de la tabla 3 que quieras mostrar.

Un saludo.

muchas gracias, era eso mismo y ya me funciona de maravilla, lo que me queda preguntarte es como ademas de poder filtrar,puedo darle la posibilidad a esa columna que ordene asc y desc como hacen las demas que si pertenecen a la tabla.

Tienes que crear un CSort y asignarlo al CActiveDataProvider.


$sort = new CSort;

$sort->attributes = array(

    'campo3'=>array(

        'asc'=>'relacion2.campo3 ASC',

        'desc'=>'relacion2.campo3 DESC'

    ),

    '*',

);


return new CActiveDataProvider ( $this, array (

    'criteria' => $criteria ,

    'sort'=>$sort		

) );

+1