has_many desde un CGridView

¿De qué manera se pueden mostrar en un CGridView datos de una tabla con relación has_many?

Tengo un modelo llamado coche con esta relacion




public function relations()

	{


		return array(

			'concesionarios' => array(self::HAS_MANY, 'Concesionarios', 'coche_id'),

		);

	}



en el método search del modelo coches he añadido esto




  ...

  $criteria=new CDbCriteria;

  ...		

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

  ...



y en el widget de la vista he añadido el siguiente campo en columns




 array(

  'name'=>'consesionarios',

  'value'=>'$data->concesionarios->nombre',

 ),



y con todo esto el error que me sale es este htmlspecialchars() expects parameter 1

¿que puedo hacer para mostrar el campo nombre de esa tabla?

Fijate que concesionarios es un array y no un item.

Lo que podés hacer es lo siguiente en el modelo coche




public function getConcesionariosDescription()

{

	$ret = array();

	foreach($this->concesionarios as $concesionario)

	{

		$ret[] = $concesionario->nombre;

	}

	return implode(', ', $ret);

}



y en el widget pones:




array(

 'name'=>'concesionarios',

 'value'=>'$data->concesionariosDescription'



bueno, espero que te sirva.

Saludos!

Siguiendo tus indicaciones soy incapaz de hacerlo funcionar, me da el mismo error

Sería correcta esta llamada?




array(

 'name'=>'concesionarios',

 'value'=>'$data->concesionariosDescription'



no haria falta llamarla así, o algo parecido?




array(

 'name'=>'concesionarios',

 'value'=>'$data->getConcesionariosDescription'



Parece que no llega a entra por la iteración




...

        foreach($this->concesionarios as $concesionario)

        {

                $ret[] = $concesionario->nombre;

        }

...



Alguna idea de porque no funciona?

Gracias!!

Supongo que querés ver el atributo ‘nombre’ y no el ‘id’ de la concesionaria.

Tenés que usar el nombre ‘Concesionarios’ (nombre de la relación). Dentro del view.php:

en lugar de

‘idConcesionario’, <-- supongo que este atributo está en tu DB, tabla coche

cambialo por:


array(

   'name'=>'Concesionario',

   'value'=>$data->Concesionarios->nombre,

),

Saludos.