【问题标题】:CHtml::listData findall returns last elementCHtml::listData findall 返回最后一个元素
【发布时间】:2014-06-09 23:52:29
【问题描述】:

我有一个下拉列表。在下拉列表中,我使用 listdata 从另一个表中检索数据。但奇怪的是,它只获取表格中的最后一项。

$form->dropDownList($model,'status_id',CHtml::listData(OrderStatus::model()->findAll(),'status_id', 'status'))

chtml::listdata 奇怪地只显示这个array(1) { [""]=> string(9) "Delivered" } 而在表中有 7 行/id,其中交付是最后一个条目。其他人怎么了?

另一个奇怪的事情是$model->status_id 实际上是 id 1,所以它不应该显示“已交付”,而应该显示“新”。

【问题讨论】:

  • OrderStatus 的表中的字段名称是什么?你也有defaultScope()吗?
  • 在状态栏中我有新的、处理中的、已发货的、退货请求、已取消、退款、已交付。是的,我有defaultscope(),但即使我删除它,也会出现同样的问题。
  • 我的意思是列名是什么?你的主键列是status_id吗?
  • 是的,就是PK。它会转到正确的列,否则不会出现“deelievered”。这很奇怪。我唯一能做的就是现在手动在数组中输入它(我知道,很糟糕)。

标签: yii


【解决方案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");

【讨论】:

  • 它给了我...Array ( [] => Delivered ).. 而不是整个列表。
【解决方案2】:

看看你是否有一个默认范围。

只需调试 OrderStatus::model()->findAll() 并查看它返回 7 条记录还是仅返回 1 条。

【讨论】:

  • 当我执行 var_dump 时它会返回全部 7 个。是的,我确实有一个默认范围,但我删除了它,它仍然是同样的问题。
  • 能否请您粘贴 print_r(OrderStatus::model()->findAll()) 的结果。你确定你有一个名为“status_id”的列而且它不仅仅是“id”
【解决方案3】:

你的 chtml::listdata 奇怪地显示 array(1) { [""]=> string(9) "已交付" }

是因为您必须在 OrderStatus 中所有行的 status_id 列中具有相同的条目,根据上述数组,该列是空白/空。

在下面调用

CHtml::listData(OrderStatus::model()->findAll(),'status_id', 'status')

status_id 是您生成的列表数组的键(数组索引),它每次都会被相同的值覆盖,这就是为什么它只显示一个和最后一个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多