php - Yii2:ActiveQuery 可以返回以 SQL 查询的第一列为键的数组吗?

标签 php database activerecord pdo yii2

我经常需要进行数据库查询,其中结果数组的键是 SQL 中指定的第一列的值(而不是键只是在填充数组时自动分配的增量数字) 。这是否可能无需事后手动重新处理数组?

我知道有 queryAll(PDO::FETCH_KEY_PAIR) 但这只适用于两列(数组值是单个数据库列,而不是所有剩余列的子数组)

所以,而不是:

array (
  0 => 
    array (
      'id' => 6955,
      'firstname' => 'John',
      'lastname' => 'Doe',
      'country' => 'United States',
    ),
  1 => 
    array (
      'id' => 8588,
      'firstname' => 'Helen',
      'lastname' => 'Smith',
      'country' => 'Denmark',
    ),
)

...我需要:

array (
  6955 => array (
    'firstname' => 'John',
    'lastname' => 'Doe',
    'country' => 'United States',
  ),
  8588 => array (
    'firstname' => 'Helen',
    'lastname' => 'Smith',
    'country' => 'Denmark',
  ),
)

它不一定是数组 - 它也可以由对象组成。重要的是结构。

最佳答案

您可以使用 indexBy() (它不会跳过结果中所选的列,但我认为这不是问题)。

示例:

$query = (new \yii\db\Query())
    ->from('user')
    ->limit(10)
    ->indexBy('id')
    ->all();

returns [
    100 => ['id' => 100, 'username' => '...', ...], 
    101 => [...], 
    103 => [...], 
    ...
]

参见the guide了解更多信息。

关于php - Yii2:ActiveQuery 可以返回以 SQL 查询的第一列为键的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697360/

相关文章:

ruby-on-rails - Activerecord 按最佳匹配排序或查询

php - 避免使用 php 显示具有 Null 值的行

php - 根据另一个数组的键对数组元素进行排序

使用模拟的 PHP Laravel 测试

sql - 使用触发器检查 VARCHAR2 是否仅包含字母

mysql - 数据库事务

sql - ActiveRecord 查询以避免需要对结果进行额外处理

php - 使用表单循环遍历数组时出现问题

mysql - 计算每个表的行数(其中表名从子查询返回)

ruby-on-rails - 通过 ActiveRecord Create 从文件加载二进制数据