首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代Yii CActiveDataProvider对象?

如何迭代Yii CActiveDataProvider对象?
EN

Stack Overflow用户
提问于 2012-08-29 02:26:37
回答 3查看 31.2K关注 0票数 13

如何迭代数据提供程序对象?我希望访问返回的每一行的“名称”字段,并构建一个列表。你能帮上忙吗?

表/模型categories表结构

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `categories` (
  `idCategory` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`idCategory`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=55 ;

*我的控制器Categories*中的函数

代码语言:javascript
复制
    $names = array();
    public function returnCategoryNames()
{
    $dataProvider= new CActiveDataProvider('Categories');
    $dataProvider->setPagination(false);
    $count = $dataProvider->totalItemCount();

    for($i = 0; $i < $count; $i++){

             // this is where I am lost...
             $myname = $dataProvider->data[$i]->name;
             array_push($names, $myname);

    }   

       return $names;

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-29 02:43:20

试试这个:

代码语言:javascript
复制
public function returnCategoryNames()
{
  $dataProvider= new CActiveDataProvider('Categories');
  $dataProvider->setPagination(false);
  //$count = $dataProvider->totalItemCount();
  $names = array();
  foreach($dataProvider->getData() as $record) {
    $names[] = $record->name;
  }
  return array_unique($names);
}

但是,您不需要使用数据提供程序,而只需使用模型

代码语言:javascript
复制
foreach(Categories::model()->findAll() as $record) {
票数 21
EN

Stack Overflow用户

发布于 2014-11-30 18:18:47

在Yii2中,这种情况也发生了变化:

代码语言:javascript
复制
    $searchModel = new ModelSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    foreach($dataProvider->getModels() as $record) {
        echo $record->id . '<br>';
    }

    exit();

参考资料:getModels()

票数 5
EN

Stack Overflow用户

发布于 2013-07-23 13:53:11

使用@ben的解决方案,您将同时查询所有行。你可能会有记忆问题。

使用以下解决方案,您将从10乘10(默认的CPagination.pageSize值)获取类别:

代码语言:javascript
复制
        $dataProvider = new CActiveDataProvider('Categories', array(
            'pagination' => array(
                'validateCurrentPage' => false
            ),
        ));
        $pagination = $dataProvider->pagination;
        while ($categories = $dataProvider->getData(true)){
            foreach ($categories as $category) {
                //...
            }
            $pagination->currentPage++;
        }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12170102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档