Yii сохранение в базе внешнего ключа и отображение его имени из другой таблицы
в общем как обычно идея проста - при сохранении нужно записывать внешний ключ на другую таблицу. при отображении находить по внешнему ключу имя во внешней таблице и отображать уже его.
1. список
в _form пишу
так нахожу список всех подразделений из другой модели
в своей модели пишу
то есть соответственно после нахождения значения отдаю имя из другой таблицы, а не ид, который хранится в модели.
если немного причесать то получается следующее
Department - модель хранит отделы. ид и наименование.
Motor - модель оборудования. с внешним ключом на отделы.
при выборке
полю с ключом на внешнюю таблицу передается сразу наименование отдела.
поэтому для селекта приходится делать запрос еще и к внешней таблице
1. список
в _form пишу
<div class="row"> <?php echo $form->labelEx($model,'m_department'); ?> <?php $criteria = new CDbCriteria(); $criteria->addInCondition('id_parent', array('0')); $opts = CHtml::listData(Department::model()->findAll($criteria),'F_ID','F_Name'); echo $form->dropDownList($model,'m_department',$opts,array('empty'=>'')); ?> <?php echo $form->error($model,'m_department'); ?> </div>
так нахожу список всех подразделений из другой модели
в своей модели пишу
protected function afterFind() { $result = Department::model()->findByPk($this->m_department); $this->m_department = $result->F_Name; parent::afterFind(); }
то есть соответственно после нахождения значения отдаю имя из другой таблицы, а не ид, который хранится в модели.
если немного причесать то получается следующее
<div class="row"> <?php echo $form->labelEx($model,'m_department'); ?> <?php $criteria = new CDbCriteria(); $criteria->addInCondition('id_parent', array('0')); $opts = CHtml::listData(Department::model()->findAll($criteria),'F_ID','F_Name'); $result = Motor::model()->findByPk($model->m_id); if (isset($result)) $result = Department::model()->find('F_Name=:myParams', array(':myParams'=>$result->m_department)); if (isset($result)) $model->m_department = $result->F_ID; echo $form->dropDownList($model,'m_department',$opts,array('empty'=>'')); ?> <?php echo $form->error($model,'m_department'); ?> </div>
Department - модель хранит отделы. ид и наименование.
Motor - модель оборудования. с внешним ключом на отделы.
при выборке
$result = Motor::model()->findByPk($model->m_id);
полю с ключом на внешнюю таблицу передается сразу наименование отдела.
поэтому для селекта приходится делать запрос еще и к внешней таблице
$result = Department::model()->find('F_Name=:myParams', array(':myParams'=>$result->m_department));
Комментарии
Отправить комментарий