Gridview

hola buenas noches tengo el sgte codigo:

<?php $this->widget(‘zii.widgets.grid.CGridView’, array(

‘id’=>‘clientes-grid’,

‘dataProvider’=>$model->search(),

‘filter’=>$model,

‘columns’=>array(

array(‘header’=>‘Apellido’,

‘name’=>‘entidad_id’,

‘value’ =>’$data->entidad->apellido’,

‘filter’ =>CHtml::listData(entidad::model()->findAll(),‘id’, ‘apellido’),

),

array(‘header’=>‘Nombre’,

‘name’=>‘entidad_id’,

‘value’ =>’$data->entidad->nombre’,

‘filter’ =>CHtml::listData(entidad::model()->findAll(),‘id’, ‘nombre’),

),

array(‘header’=>‘Localidades’,

  'name'=&gt;'entidad_id',


  'value' =&gt;('&#036;data-&gt;entidad-&gt;localidad-&gt;nombre'),


  'filter' =&gt;CHtml::listData(entidad::model()-&gt;findAll(), 'localidad_id','localidad.nombre')

),

array(

‘class’=>‘CButtonColumn’,

),

),

)); ?>

dicho código me muestra los valores que deseo pero cuando realizo la búsqueda de una localidad por ejemplo con el filter, me dice que no hay resultados cuando si los hay, no se si defini mal los filter o que, pero no me da ningún error.muchas gracias.

este código se encuentra dentro del admin.php de clientes, y clientes se relaciona con entidad, las relaciones y el controllers esta todo bien no modifique nada, ademas no me tira error solo dice que no se encontraron resultados cuando uso el filter para seleccionar una locaalidad por ejemplo.

otra cosa: si comento el array de localidad y dejo unicamente los array de nombre y apellido, me filtra unicamente en uno de los dos, es decir que si busco por nombre encuentra y si busco por apellido desde el select no me realiza la busqueda pero no me aparece ningun error, si dejo el array de apellidos unicamente me filtra bien a si que yo creo que no se puede usar dos array con el mismo name o algo asi. espero haber sido clara saludos y buen año!

podrias poner las tablas y las relaciones? creeo q hay eta el error! pq cuando haces esto:

‘value’ =>(’$data->entidad->localidad->nombre’), // aqui dices que de entidad vas con la relacion a localidad y agarras el valor de “nombre”

‘filter’ =>CHtml::listData(entidad::model()->findAll(), ‘localidad_id’,‘localidad.nombre’) // por lo tanto aquí no deberías buscar de la tabla entidad si no de “localidad” osea quedaria:

‘filter’ =>CHtml::listData([color="#FF8C00"]localidad[/color]::model()->findAll(), ‘localidad_id’,‘localidad.nombre’)

public function relations()

{


	


	return array(


	


    'estado'=&gt;array(self::BELONGS_TO, 'Estado', 'estado_id'),


	'entidad'=&gt;array(self::BELONGS_TO, 'Entidad', 'entidad_id'),


	'concesionario'=&gt;array(self::BELONGS_TO, 'concesionario', 'concesionario_id'),


	);


}

esas son las relaciones, clientes no esta relacionado directamente con localidad, clientes se relaciona con entidad y entidad se relaciona con localidad, hice como me dijiste pero en el select me aparecen los nombres de los clientes q se encuentran dentro de entidad pero el id me toma bien y si pongo localidad.nombre me dice lo sgte

Propiedad "Localidad"."localidad" no se encuentra definida.

hola, el problema podria estar en el metodo search() y la definicion de reglas (el array de rules()) en la cual se indica que campos se usan para el escenario search, si uno de esos campos (por ejemplo "localidad") no esta en la definicion de reglas para el escenario search pues el modelado de yii no te movera los valores a esas variables.

bro no entendi bien que quieres hacer! por eso te digo pon las tablas pa ver las fk y pk y ver bien que es en realidad lo que quieres! pero filter lo que hace es sacar info de una tabla y te muestra la info de un campo y utiliza la info de otro campo para hacer las busquedas! ahora si tu problema es el filter que es lo que imagino te explico:

‘filter’ =>CHtml::listData([size=“3”][color="#A0522D"]localidad[/color][/size]::model()->findAll(), [size=“3”][color="#556B2F"]‘localidad_id’[/color][/size],[size=“3”][color="#483D8B"]‘localidad.nombre’[/color][/size])

[size="3"][color="#A0522D"]color:[/color][/size] Aqui va el nombre de la tabla de la cual extraeras la información

[size="3"][color="#556B2F"]color:[/color][/size] Aqui va la data que utilizara como busqueda o sea la info que comparara para la busqueda

[size="3"][color="#483D8B"]color:[/color][/size] Aqui va la info que queires que muestre en el dropdown.

Ahora. lo que creo es q tienes error con el nmombre en tus tablas estas confundido ya que:

‘value’ =>(’$data->entidad->localidad->nombre’), // aqui dices que el campo es “nombre”

‘filter’ =>CHtml::listData(entidad::model()->findAll(), ‘localidad_id’,‘localidad.nombre’) // aqui dices que el campo se llama “localidad.nombre” por eso no encuentra nada! escribe “nombre” aqui y listo

claro nuelma el campo que deseo mostrar es nombre, pero de la tabla localidad, no de la tabla entidad por eso pongo ‘value’ =>(’$data->entidad->localidad->nombre’), y me muestra el nombre de la localidad pero el problema es el filter, ya q cuando selecciono una de las localidades me dice que no encuentra nada, y para poder mostrar el nombre de las localidades tengo que poner entidad dentro de listData porq clientes no esta relacionado con localidades,

clientes esta relacionado con entidad y entidad se relaciona con localidad, mas arriba te pase las relaciones que se encuentran dentro del modelo clientes.

yo tengo las sgtes tablas:

clientes:

entidad_id demás datos q no me interesan mostrar.

entidad:

id, nombre, apellido, localidad_id

localidad:

id, nombre.

osea q para mostrar desde clientes las localidades, debo ingresar desde la tabla entidad a la tabla localidades.

puede que cristian tenga razón y el error este en rules a si que voy a mirar, si encontras que puede ser otro el error respondeme.

muchas gracias por las respuestas a los dos!

mi tabla entidad tiene los datos de los clientes, proveedores tecnicos y demas, probé también modificar directamente el admin de entidad para mostrar los nombres apellidos y localidades unicamente de los clientes pero no se como se podria filtrar para que me muestre solo los clientes y no todas las personas que tengo dentro de entidad, el resto me anda todo y el filter de localidades también me anda desde entidad. si hay alguna forma de mostrar solo los clientes capaz es mas fácil que hacerlo desde clientes que no esta relacionada con localidades, si tenes la solucion la escucho :) la leo mejor dicho :)

aca te dejo las relaciones de entidad:

return array(

		'clientes' =&gt; array(self::HAS_ONE, 'Clientes', 'entidad_id'),


		'concesionario' =&gt; array(self::HAS_ONE, 'Concesionario', 'entidad_id'),


		'localidad' =&gt; array(self::BELONGS_TO, 'Localidad', 'localidad_id'),


	);

y las relaciones de clientes:

return array(

    'estado'=&gt;array(self::BELONGS_TO, 'Estado', 'estado_id'),


	'entidad'=&gt;array(self::BELONGS_TO, 'Entidad', 'entidad_id'),


	'concesionario'=&gt;array(self::BELONGS_TO, 'concesionario', 'concesionario_id'),


	


	);

muchas gracias nuevamente!!!!

una cosa mas! yo considero que la base de datos esta mal diseñada porque hay q hacer demasiadas relaciones para acceder a todos los datos de los clientes y de la misma manera tengo q hacer relaciones y crear nuevos modelos para crear el cliente, estoy en lo cierto al pensar eso? cuando cargo alguna pagina que tiene muchas relaciones tarda mucho y me parece q no es optimo tener tantas tablas cuando se podría minimizarlas. ademas una de las ventajas de este framework es la velocidad con la que opera pero a mi se me hace lenta la aplicación y estoy pensando rediseñar la base de datos por eso me interesaría su opinión, o alguno tips para crear una buena base de datos, asi tengo comparacion con la que tengo en uso que no la cree yo.

muchas gracias

para crear una buena base de datos tienes que tener en cuenta la normalizacion! lee sobre eso empapate! por que si consideras que tu base de datos esta mal diseñada es porque es asi ajajaja! si no estas conforme con tu trabajo es mejor revisarlo!. y no importa q tenga muchas tablas! yo personalmente considero una base de datos decente en 3forma normal o la forma de Boyce Codd!.. a mi me funciona ps!.

+1

A ver tus rules!!!!!! ;D

sii gracias nuelma el problema esta que la base de dato no la hice yo :( y no me dejan rediseñarla, te comento que ahora tengo otro problema, tengo que listar los reclamos que tengan fecha_resulcion==null, solo listarlos por lo tanto uso el index.php y estoy modificando el _view y le hice de esta manera:

5058

_view.png

esto anda todo perfecto ahora el problema esta en la paginacion porq me aparece de esta manera 5059

pag.png

y recien en la pag 49 me aparece un registro que cumple con la condicion antes mencionada como hago para q no me aparezcan todas esas paginas antes y solo me aparezcan los registros que cumplen la condicion???

gracias

Podrías poner el código de tu CGridView y de la función donde generas el dataProvider (que supongo estará en el modelo)?

Un saludo.

Tengo exactamente el mismo problema, si pueden darme una solucion se lo estaré eternamente agradecido

hola epulgaron me comentas mejor cual es tu problema? yo consegui solucionar ese problema pero necsito q me ambientes un poco con la duda que vos estas teniendo.

ya logré solucionarlo muchas gracias de todas formas