有没有yii2等同于zend1 fetchAssoc?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有yii2等同于zend1 fetchAssoc?相关的知识,希望对你有一定的参考价值。

我正在尝试将zend1站点升级到yii2,并且表模型经常使用fetchAssoc从数据库获取记录,并将ID列作为数组键。是否有yii2等价物?

示例:php

$query = table::find()                
    ->select(['id',
         'firstName',
         'lastName'
    ])->indexBy('id'); //no effect?

$command = $query->createCommand();

$results = $command->queryAll();

数据库包含

[
    [
       id=>15
       firstName=>"fname",
       lastName=>"lname"
    ],
    [
       id=>16
       firstName=>"fname2",
       lastName=>"lname2"
    ]
]

我想让它回归

[
    15=>
       [
          id=>15
          firstName=>"fname",
          lastName=>"lname"
       ],
    16=>
       [
          id=>16
          firstName=>"fname2",
          lastName=>"lname2"
       ]
]

代替

[
    0=>
       [
          id=>15
          firstName=>"fname",
          lastName=>"lname"
       ],
    1=>
       [
          id=>16
          firstName=>"fname2",
          lastName=>"lname2"
       ]
]

如果我加

$results=array_combine(array_column($results,key($results[0])), $results);

这会创建索引,但我更愿意使用框架来完成它。

谢谢

答案

要做到这一点,它需要asArray(true)和indexBy('列名或函数'),然后调用all,或column或one。

$results = table::find()->asArray(true)->indexBy('id')->all()

我以前用过

$command = $query->createCommand();
$results = $command->queryAll();

最终代码示例:

$query = table::find()                
    ->select(['id',
         'firstName',
         'lastName'
    ])->indexBy('id')->asArray(true);
$results=$query->all();

以上是关于有没有yii2等同于zend1 fetchAssoc?的主要内容,如果未能解决你的问题,请参考以下文章

“CLS”等同于BASH?

学习zend框架1.24的一个好的和完美的地方

YII2 文件管理器(pdf、docx 等)[关闭]

Yii2学习笔记1--Yii2的基本介绍和Composer安装

Yii2 Twitter Bootstrap 徽章颜色不变:未找到徽章成功徽章危险等类别

yii2.0数据库查询修改等方法