Yii сохранение в базе внешнего ключа и отображение его имени из другой таблицы

в общем как обычно идея проста - при сохранении нужно записывать внешний ключ на другую таблицу. при отображении находить по внешнему ключу имя во внешней таблице и отображать уже его.
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));

Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Удобная разработка Windows Service с TopShelf