¿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?
sebas
(Sebathi)
2
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.