Hola
Estoy realizando un trabajo con yii e instale giix.
Hasta el momento todo iba bien hasta que me di cuenta que llegue a las relaciones MANY MANY.
Tengo tres tablas:
4791
Que son:
Servicios
Sucursal
servicio_tiene_sucursal
Al momento de crear una sucursal me aparece lo siguiente:
4792
Ese valor 1 y 2 son los id de los datos que tiene la tabla servicio_tiene_sucursal. Mi idea es que en vez que aparezca el 1 y el 2 en el label aparezca el nombre de servicio.
PARTE DE LA VIEW
<?php echo $form->error($model,'principal'); ?>
</div><!-- row -->
<div class="row">
<?php echo $form->labelEx($model,'longitud'); ?>
<?php echo $form->textField($model, 'longitud', array('maxlength' => 255)); ?>
<?php echo $form->error($model,'longitud'); ?>
</div><!-- row -->
<div class="row">
<?php echo $form->labelEx($model,'latitud'); ?>
<?php echo $form->textField($model, 'latitud', array('maxlength' => 255)); ?>
<?php echo $form->error($model,'latitud'); ?>
</div><!-- row -->
<label><?php echo GxHtml::encode($model->getRelationLabel('sucursalHabitacions')); ?></label>
<?php echo $form->checkBoxList($model, 'sucursalHabitacions', GxHtml::encodeEx(GxHtml::listDataEx(SucursalHabitacion::model()->findAllAttributes(null, true)), false, true)); ?>
<label><?php echo GxHtml::encode($model->getRelationLabel('sucursalImagens')); ?></label>
<?php echo $form->checkBoxList($model, 'sucursalImagens', GxHtml::encodeEx(GxHtml::listDataEx(SucursalImagen::model()->findAllAttributes(null, true)), false, true)); ?>
<label><?php echo GxHtml::encode($model->getRelationLabel('sucursalTarifas')); ?></label>
<?php echo $form->checkBoxList($model, 'sucursalTarifas', GxHtml::encodeEx(GxHtml::listDataEx(SucursalTarifa::model()->findAllAttributes(null, true)), false, true)); ?>
<label><?php echo GxHtml::encode($model->getRelationLabel('sucursalTieneServicios')); ?></label>
<?php echo $form->checkBoxList($model, 'sucursalTieneServicios', GxHtml::encodeEx(GxHtml::listDataEx(SucursalTieneServicio::model()->findAllAttributes(null, true)), false, true)); ?>
CONTROLLER
public function actionCreate() {
$model = new Sucursal;
if (isset($_POST['Sucursal'])) {
$model->setAttributes($_POST['Sucursal']);
if ($model->save()) {
if (Yii::app()->getRequest()->getIsAjaxRequest())
Yii::app()->end();
else
$this->redirect(array('view', 'id' => $model->id_sucursal));
}
}
$this->render('create', array('model' => $model));
}
MODELO SUCURSAL
public function relations() {
return array(
'idHotel' => array(self::BELONGS_TO, 'Hotel', 'id_hotel'),
'idComuna' => array(self::BELONGS_TO, 'Comuna', 'id_comuna'),
'sucursalHabitacions' => array(self::HAS_MANY, 'SucursalHabitacion', 'id_sucursal'),
'sucursalImagens' => array(self::HAS_MANY, 'SucursalImagen', 'id_sucursal'),
'sucursalTarifas' => array(self::HAS_MANY, 'SucursalTarifa', 'id_sucursal'),
'sucursalTieneServicios' => array(self::HAS_MANY, 'SucursalTieneServicio', 'id_sucursal'),
);
}
public function pivotModels() {
return array(
);
}
public function attributeLabels() {
return array(
'id_sucursal' => Yii::t('app', 'Id Sucursal'),
'id_hotel' => null,
'id_comuna' => null,
'direccion' => Yii::t('app', 'Direccion'),
'numero' => Yii::t('app', 'Numero'),
'extra' => Yii::t('app', 'Extra'),
'tel_uno' => Yii::t('app', 'Tel Uno'),
'tel_dos' => Yii::t('app', 'Tel Dos'),
'tel_tres' => Yii::t('app', 'Tel Tres'),
'email' => Yii::t('app', 'Email'),
'principal' => Yii::t('app', 'Principal'),
'longitud' => Yii::t('app', 'Longitud'),
'latitud' => Yii::t('app', 'Latitud'),
'idHotel' => null,
'idComuna' => null,
'sucursalHabitacions' => null,
'sucursalImagens' => null,
'sucursalTarifas' => null,
'sucursalTieneServicios' => null,
);
}
MODELO SUCURSALTIENESERVICIO
abstract class BaseSucursalTieneServicio extends GxActiveRecord {
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'sucursal_tiene_servicio';
}
public static function label($n = 1) {
return Yii::t('app', 'Servicios Sucursal|Servicios Sucursal', $n);
}
public static function representingColumn() {
return 'id_sucursaltieneservicio';
}
public function rules() {
return array(
array('id_sucursal, id_servicios', 'numerical', 'integerOnly'=>true),
array('id_sucursal, id_servicios', 'default', 'setOnEmpty' => true, 'value' => null),
array('id_sucursaltieneservicio, id_sucursal, id_servicios', 'safe', 'on'=>'search'),
);
}
public function relations() {
return array(
'idServicios' => array(self::BELONGS_TO, 'Servicios', 'id_servicios'),
'idSucursal' => array(self::BELONGS_TO, 'Sucursal', 'id_sucursal'),
);
}
public function pivotModels() {
return array(
);
}
public function attributeLabels() {
return array(
'id_sucursaltieneservicio' => Yii::t('app', 'Id Sucursaltieneservicio'),
'id_sucursal' => Yii::t('app', 'Sucursal'),
'id_servicios' => Yii::t('app', 'Servicio'),
'idServicios' => null,
'idSucursal' => null,
);
}
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('id_sucursaltieneservicio', $this->id_sucursaltieneservicio);
$criteria->compare('id_sucursal', $this->id_sucursal);
$criteria->compare('id_servicios', $this->id_servicios);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
}
MODELO SERVICIO
<?php
abstract class BaseServicios extends GxActiveRecord {
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'servicios';
}
public static function label($n = 1) {
return Yii::t('app', 'Servicios|Servicioses', $n);
}
public static function representingColumn() {
return 'nombre';
}
public function rules() {
return array(
array('nombre', 'length', 'max'=>255),
array('nombre', 'default', 'setOnEmpty' => true, 'value' => null),
array('id_servicios, nombre', 'safe', 'on'=>'search'),
);
}
public function relations() {
return array(
'sucursalTieneServicios' => array(self::HAS_MANY, 'SucursalTieneServicio', 'id_servicios'),
);
}
public function pivotModels() {
return array(
);
}
public function attributeLabels() {
return array(
'id_servicios' => Yii::t('app', 'Id Servicios'),
'nombre' => Yii::t('app', 'Nombre'),
'sucursalTieneServicios' => null,
);
}
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('id_servicios', $this->id_servicios);
$criteria->compare('nombre', $this->nombre, true);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
}
Muchas Gracias