有没有yii2等同于zend1 fetchAssoc?

问题描述 投票:1回答:1

我正在尝试将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);

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

谢谢

php zend-framework yii2
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.