我有一个下拉列表。在下拉列表中,我使用listdata从另一个表中检索数据。但奇怪的是,它只能获得表格中的最后一项。
$form->dropDownList($model,'status_id',CHtml::listData(OrderStatus::model()->findAll(),'status_id', 'status'))
chtml::listdata
奇怪地只显示此array(1) { [""]=> string(9) "Delivered" }
,而在表中有7行/ id,其中delivery是最后一个条目。其他人怎么了?
另一个奇怪的事实是$model->status_id
实际上是id 1,所以它不应该显示'Delivered',它应该显示'New'。
答案 0 :(得分:1)
看看这个:
示例1:生成类别的列表数据
// you can use here any find method you think proper to return your data from db*/
$models = categories::model()->findAll();
// format models resulting using listData
$list = CHtml::listData($models, 'category_id', 'category_name');
print_r($list);
HTML输出(示例):
array("1" => "Arts", "2" => "Science", "3" => "Culture");
答案 1 :(得分:0)
查看您是否有任何默认范围。
只需对OrderStatus :: model() - > findAll()进行调试,看看它是返回7条记录还是仅返回1条。
答案 2 :(得分:0)
您的chtml :: listdata奇怪地显示 array(1){[“”] =>字符串(9)“已交付”}
是因为您必须在OrderStatus的所有行的status_id列中具有相同的条目,根据上面的数组,该行为空/空。
在下面的通话中
CHtml :: listData(OrderStatus :: model()-> findAll(),'status_id','status')
status_id是生成的列表数组的键(array的索引),并且每次都会被相同的值覆盖,因此它仅显示一个值和最后一个值。