Mostrar Campo Relacionado


(Pedrorojas) #1

Que tal.

Soy nuevo trabajando en este framework, sobre todo con actrive record y las relaciones.

Genere mi codigo con la herramienta gii y me genero la relación de mis dos tablas en el modelo.




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(

			'articulo' => array(self::BELONGS_TO, 'Articulo', 'articulo_id'),

		);

	}



Cuando en la vista se me lista los campos solo veo el articulo_id. ¿Que me falta agregar para ver el nombre del articulo?

En la vista tengo el siguiente código.


<?php $this->widget('zii.widgets.CListView', array(

	'dataProvider'=>$dataProvider,

	'itemView'=>'_view',

)); ?>



Gracias por su ayuda


(Carlos Belisario Gonzalez) #2

Muestra la consulta que estas realizando,le estas agregando el with?? ver la documentación oficial sobre las relaciones http://www.yiiframework.com/doc/guide/1.1/en/database.arr no estaría de más, saludos


(Yii) #3

Hola! Usted puede probar giix.


(Pedrorojas) #4

Hola gracias por la respuesta. Vi la documentación pero no me quedaba tan claro y buscando me encontre un video.

Lo que me faltaba es crear el modelo con de mi otra tabla con la que se hace la ralación en este caso articulo y ya solo hice:


echo CHtml::encode($data->articulo->articulo);

Antes tenia en mi vista _view:


echo CHtml::encode($data->articulo_id);


(Ricobregon) #5

Si utiliza Bootstrap (de Twitter) le recomiendo AweCrud, pues genera el código CSS 100% compatible con Bootstrap ;)

Saludos


(Manuel Vi73) #6

Epa!. se que este post esta mas que resuelto!. pero tengo el mismo problema que tu! y dices que solo cambiastes en la vista _view

[color="#FF0000"]echo CHtml::encode($data->articulo_id);[/color]

por

[color="#0000FF"] echo CHtml::encode($data->articulo->articulo);[/color]

suponiendo que:

echo CHtml::encode($data->Nombre_de_la_relacion->campo_de_la_tabla);

pues yo tengo algo parecido

[color="#FF0000"]<?php echo CHtml::encode($data->cod_prov); ?>[/color]

y lo cambie por

[color="#0000FF"]<?php echo CHtml::encode($data->codProv->razon_social); ?>[/color] y me da el error "Trying to get property of non-object" y e intentado cambiar el nombre de la relación por el nombre de la tabla y tampoco!.. me gustaría que me pasaras ese vídeo que viste porfa!..

ya cree ambos modelos y ambos crud con el gii!.. pero no encuentro como acceder a los demas campos de la tabla relacioanda q no sea la PK


(Pedrorojas) #7

Hola.

Lo que me hacia falta era la relación con mi otro modelo.

Generé mi modelo "documento_linea" si ya definiste las relaciones en la BD gii te genera las relaciones solito de lo contrario hay que agregarla manualmente; esto es lo que hice yo.

Estas son todas las relaciones de mi modelo entre ellas la de articulo.




	return array(

			'alumno' => array(self::BELONGS_TO, 'Alumno', 'alumno_id'),

			'articuloGradoPeriodo' => array(self::BELONGS_TO, 'ArticuloGradoPeriodo', 'articulo_grado_periodo_id'),

			'documento' => array(self::BELONGS_TO, 'Documento', 'documento_id'),

			'canalVenta' => array(self::BELONGS_TO, 'CanalVenta', 'canal_venta_id'),

			'articulo' => array(self::BELONGS_TO, 'Articulo', 'articulo_id'),

			'persona' => array(self::BELONGS_TO, 'Persona', 'persona_id'),

			'tipoVenta' => array(self::BELONGS_TO, 'TipoVenta', 'tipo_venta_id'),

			'plazo' => array(self::BELONGS_TO, 'Plazo', 'plazo_id'),

			'colegio'=>array(self::BELONGS_TO, 'Colegio', 'persona_id'),


		);



Luego en mi vista en mi caso "admin" hice lo siguiente:




$this->widget('bootstrap.widgets.TbGridView', array(

	'id'=>'documento-linea-grid',

	'type'=>'striped bordered condensed hover',

	'dataProvider'=>$model->ObtenerDocumentos(),

	'filter'=>$model,

	'columns'=>array(

		'documento_id',

		array('name'=>'articulo_id', 

			'value'=>'isset($data->articulo)? $data->articulo->articulo:"--"'

		),

	)

 ));

Dado que ya definí la reacion "articulo" con mi modelo "Articulo" por medio de la PK "articulo_id" puedo acceder al nombre del articulo mediante "$data->articulo->articulo".

Espero te ayude.

Saludos.


(Manuel Vi73) #8

si me sirvió bro! gracias!.. la cosa es que estaba confundido con $data->articulo->articulo:"–"’ ya vi q el primer articulo se refiere a la relación y el segundo articulo es el nombre de la tabla