Yii Framework Forum: Problema Con Cgridview - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema Con Cgridview Habilitar el search en campos relaciones Rate Topic: -----

#1 User is offline   Gustavo Ramírez 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 22-April 13

Posted 07 October 2013 - 01:48 PM

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 Attached File  base de datos.png (29.94K)
Number of downloads: 11 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)
0

#2 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 11 October 2013 - 07:41 AM

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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#3 User is offline   Gustavo Ramírez 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 22-April 13

Posted 26 November 2013 - 08:24 AM

Gracias lagogz :D eso era lo que necesitaba
0

#4 User is offline   nuelma 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 08-December 13

Posted 08 December 2013 - 03:54 PM

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
{
public $razon_social; //tu paso 1

public function rules()
{
return array(
array('cantidad_ent, cod_prov, cod_material', 'numerical', 'integerOnly'=>true),
array('f_entrada', 'safe'),
array('razon_social', 'safe'), //PASO 2
array('razon_social', 'safe', 'on'=>'search'), //PASO 2

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(
'codProv' => array(self::BELONGS_TO, 'Proveedores', 'cod_prov'),



public function search() //paso 3
{
$criteria=new CDbCriteria;
$criteria->with = array('codProv');
$criteria->compare('codProv.razon_social',$this->razon_social,true);

$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>
<?php echo CHtml::encode($data->razon_social); ?> // en esta linea es q creo tener el error y e intentado con ($data->codProv->razon_social) y nada!...
<br />
0

#5 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 02 January 2014 - 03:03 AM

View Postnuelma, on 08 December 2013 - 03:54 PM, said:

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
{
public $razon_social; //tu paso 1

public function rules()
{
return array(
array('cantidad_ent, cod_prov, cod_material', 'numerical', 'integerOnly'=>true),
array('f_entrada', 'safe'),
array('razon_social', 'safe'), //PASO 2
array('razon_social', 'safe', 'on'=>'search'), //PASO 2

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(
'codProv' => array(self::BELONGS_TO, 'Proveedores', 'cod_prov'),



public function search() //paso 3
{
$criteria=new CDbCriteria;
$criteria->with = array('codProv');
$criteria->compare('codProv.razon_social',$this->razon_social,true);

$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>
<?php echo CHtml::encode($data->razon_social); ?> // 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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#6 User is offline   epulgaron 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 19-February 14

Posted 16 March 2014 - 01:54 PM

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é


View Postlagogz, on 11 October 2013 - 07:41 AM, said:

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.

0

#7 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 17 March 2014 - 09:23 AM

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.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#8 User is offline   epulgaron 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 19-February 14

Posted 18 March 2014 - 10:36 AM

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.


View Postlagogz, on 17 March 2014 - 09:23 AM, said:

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.

0

#9 User is offline   a18327 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 97
  • Joined: 14-August 13
  • Location:México

Posted 19 March 2014 - 11:28 AM

View Postepulgaron, on 18 March 2014 - 10:36 AM, said:

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		
) );

2

#10 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 20 March 2014 - 05:36 AM

View Posta18327, on 19 March 2014 - 11:28 AM, said:

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
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users