Hola tengo 3 dias trabajando con Yii Framework (es el primer framework que pruebo) y me ha gustado mucho, ahora tengo una duda para generar un campo la vista.
tengo dos tablas en mi base de datos, platillos y postres.
platillos:
id
descripcion
id_postre
postres:
id
descripcion
Lo que pretendo es desplegar un listado de platillos con la descripcion de su postre, pero no he podido encontrar donde modificar el SQL-Query.
En el modelo Platillos defines la siguiente relación:
// models/Platillos
public function relations() {
return array(
'postre' => array(self::BELONGS_TO, 'Postres, 'id_postre'),
);
}
Luego en Postres
// models/Postres
public function relations() {
return array(
'platillos' => array(self::HAS_MANY, 'Platillos, 'id_postre'),
);
}
Posteriormente podrás acceder en cualquiera de los dos sentidos con
// La descripción del postre de un platillo
$platillo = Platillos::model()->findByPk($pk);
echo CHtml::encode($platillo->postre->descripcion); //accede a la descripción del postre correspondiente al platillo
// Todos los platillos que tienen el mismo postre
$postre = Postres::model()->findByPk($pk);
$postre->platillos;
// acá puedes incluso hacer un foreach para obtener atributos de cada uno de los platillos
foreach($postre->platillos as $platillo) {
echo CHtml::encode($platillo->descripcion);
}
Si modelas tu base de datos con una correcta entidad referencial (declarando claves foraneas) Yii captura automáticamente estas relaciones y te ahorras el hacerlas tú. A lo mucho tendrás que cambiarles de nombre, porque suele haber problemas con los plurales en tablas con nombres en español.
PS: Para que funcione lo descrito en el párrafo anterior debes usar un motor de base de datos que soporte claves foraneas, como InnoDB.
2) En /models/Platillos
public function getDescripcion() u otro nombre para no confundirte{
return Postre::model()->findByPk($this->id_postre)->Descripcion;
}
Quedaría:
public function getDescripcion(){
return $this->postre->Descripcion;
}