【问题标题】:Yii2: checkboxList doesn't show ArrayDataProviderYii2:checkboxList 不显示 ArrayDataProvider
【发布时间】:2019-05-07 16:57:00
【问题描述】:

我想使用checkboxList 来显示来自数据提供者的数据。

我的视图文件:

$offices = Offices::findMyOffices();
echo Html::checkboxList('name', [], $offices);

我的模型文件:

public static function findMyOffices()
{    
    $dataProvider = new ArrayDataProvider([
        'allModels' => 'SELECT id_office ...'
    ]);

    return $dataProvider;
}

但视图向我显示了带有 sql 查询 的复选框列表,而不是 sql 查询的结果

【问题讨论】:

  • 您是否尝试阅读文档? allModels 应该是模型列表,而不是 SQL 查询。

标签: php arrays yii2 checkboxlist


【解决方案1】:

我解决了using sqlDataProvider:

查看:

$offices = Offices::findMyOffices();        
echo Html::checkboxList('name', [], ArrayHelper::map($offices, 'id_office', 'name_office'));

型号:

public static function findMyOffices()
{    
    $dataProvider = new sqlDataProvider([
        'sql' => 'SELECT id_office ...'
    ]);

    return $dataProvider->getModels();
}

【讨论】:

  • 为什么你使用数据提供者而不是ActiveRecord::findBySql()
  • 使用查询更容易或者我不知道如何使用 ActiveRecord::findBySql() :)
  • 通常在这种情况下使用数据提供者没有意义 - 数据提供者的主要好处是支持排序和分页,您可能不需要它。
【解决方案2】:

ArrayDataProvider 需要一个项目数组。您可以将 ->asArray() 添加到您的活动查询中。

$dataProvider = new ArrayDataProvider([
        'allModels' => [['id' => 1, 'title' => 'xxx, ...], ...],
    ]);

我最喜欢为下拉菜单获取数据的是:

MyModel::find()->select('name', 'id')->indexBy('id')->column()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2018-08-10
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多