Как создать выпадающий список в Yii?

#php #yii #yii-chtml

#php #yii #yii-chtml

Вопрос:

У меня есть 2 атрибута в модели jobs , они tag и category , я хочу создать выпадающий список, который отображает значение tag того, у кого category одинаковая «зарплата», вот мой код:

 $s= CHtml::listData($model2, 'salary', 'tag');                         
echo CHtml::dropDownList('salary', 'salary', $s);
 

моя БД:

тег / категория

1 / val1

2 / val1

a / val2

1000 / зарплата

2000 / зарплата

но я получил выпадающий список, который содержит только последнее значение, у которого есть эти условия. что не так в моем коде?

Ответ №1:

Есть две причины, по которым вы можете получить только один результат, во-первых, количество результатов, которые вы получаете, $model2 влияет на результаты, проверьте, используете ли вы findAll для возврата все строки, соответствующие условию, а не find нет, и findByPk поскольку они возвращают только одно значение,

Во-вторых, вторым атрибутом listData должно быть ваше поле значений «зарплата» не является атрибутом модели, это должно быть поле значений (см. Это).

Он останется неизменным, если ему присвоено salary постоянное значение as — для всех элементов option, что означает, что ваш массив будет перезаписан для каждого охвата, оставляя вас с массивом из одного элемента, содержащего последнее значение.

Вы должны ‘tag_id’ / ‘id’ или какой-то первичный ключ из вашей модели или значения тега (при условии, что он уникален), чтобы идентифицировать тег с помощью

 $model2 = MyModel::model()->findAll("category = salary");
$s= CHtml::listData($model2, 'tag', 'tag');                         
echo CHtml::dropDownList('salary', 'salary', $s,array('empty'=>'--Select--'));
 

Комментарии:

1. но $model2 будет изменяться каждый раз в зависимости от условий клиента, при первой $model2 инициализации findAll() , затем он будет изменен

2. эй, смотрите мой пересмотренный ответ, ваша проблема отличается от того, что я думаю, если вы уже используете use findAll

3. Я изменил salary , на category которое указано имя атрибута модели, содержащего значение salary , результат таков: я получил для каждого значения category последнее значение tag , которое соответствует categoty , я покажу вам свою базу данных в вопросе

4. Кажется, у вас нет какого-то уникального ключа, вместо этого вы можете использовать значение самого тега дважды, как я сделал сейчас в своем обновленном ответе. Посмотрим, поможет ли это

5. это вернет все значения tag