Создание выпадающего списка из связанной таблицы yii

У меня есть две таблицы: product и product_type (относящиеся к моделям, соответственно, Product и Product_type):

product : product_id, product_type_id, name, etc...
product_type : product_type_id, name, desc, etc...

Оба связаны с ключом product_type_id.

Я создал crud для обеих таблиц, используя генератор gii crud. Теперь на странице формы продукта я хочу отобразить список всех имен product_type в раскрывающемся поле с помощью Yii ActiveRecord. Я добавил эту строку в скрипт views / product / _form.php:

<?php
    $list = CHtml::listData(ProductType::model()->findAll(array('order' => 'product_type_name')), 'id', 'id');
    echo $form->dropDownList($model, 'product_type_id', $list);
?>

Но он показывает пустое раскрывающееся поле :(

Как я могу это сделать?


person J.K.A.    schedule 06.07.2013    source источник


Ответы (3)


Решенный MySelf :)

Просто предоставив product_type_name.

<?php
        $list = CHtml::listData(ProductType::model()->findAll(array('order' => 'product_type_name')), 'product_type_id', 'product_type_name');
        echo $form->dropDownList($model, 'product_type_id', $list);
        ?>
person J.K.A.    schedule 06.07.2013
comment
Я использую это решение, и оно работает. Но если product_type_id имеет значение null, тогда будет показан 1-й элемент product_type_name. Можно ли просто пустое показать? - person Dennys; 20.02.2014

В Yii2 класс CHtml больше не существует.

Ниже представлено решение, основанное на следующих предположениях:

  • Используется структура Yii2;
  • Таблица product_type связана с моделью Product_type;
  • В таблице product_type есть поле с названием «type-name».


     <?php
         // get all product types from the corresponding table:
         $productTypes = Product_type::find()->orderBy('type-name')->asArray()->all(); 
         // create an array of pairs ('id', 'type-name'):
         $productTypeList = ArrayHelper::map($productTypes, 'id', 'type-name'); 
         // finally create the drop-down list:
         $form->field($model, 'product_type_id')->dropDownList($productTypeList) 
     ?>
person Aldo Paradiso    schedule 10.06.2016

Измените свой код, как показано ниже

    <?php
    $list = CHtml::listData(ProductType::model()->findAll(array('order' => 'product_type_name')), 'table_col_name1', 'table_col_name2'); //table_col_name1 is value of option, table_col_name2 is label of option
    // echo $form->dropDownList($model, 'product_type_id', $list);
    echo CHtml::dropDownList('name_of_the_dropdown', $model, $list);
    ?>
person Hearaman    schedule 06.07.2013