有没有yii2等同于zend1 fetchAssoc?

时间:2017-12-20 19:41:49

标签: php zend-framework yii2

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

实施例: PHP

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

$command = $query->createCommand();

$results = $command->queryAll();

Datebase包含

[
    [
       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);

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

由于

1 个答案:

答案 0 :(得分:0)

要做到这一点,它需要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();