使用Doctrine获取多行单列数组

问题描述 投票:5回答:3

我有这样的Doctrine fetch语句

$query = "SELECT id FROM table LIMIT 2";
$result = $db->fetchAll($query);

它返回这样的数组:

Array
(
[0] => Array
    (
        [id] => 1
    )

[1] => Array
    (
        [id] => 2
    )
)

由于我获取的唯一列是ID,我不需要数组范围那么深。是否有一种方便的方法使Doctrine将结果返回到“平面”数组中,类似于PDO的作用:

$result = $db->query($query)->fetchAll(PDO::FETCH_COLUMN);

将返回

Array
(
    [0] => 1
    [1] => 2
)

目前我正在使用它

$result = call_user_func_array('array_merge', array_map("array_values", $result));
php mysql pdo doctrine doctrine-query
3个回答
8
投票

您可以简单地使用PDO功能(至少如果您有MySQL)。

$ids = $db
    ->executeQuery($query)
    ->fetchAll(\PDO::FETCH_COLUMN)
;

5
投票

要解决此问题,您必须制作自定义doctrine保湿器。

  1. 第一:制作自己的保湿剂
<?php
namespace MyProject\Hydrators;

use Doctrine\ORM\Internal\Hydration\AbstractHydrator;

class CustomHydrator extends AbstractHydrator
{
    protected function _hydrateAll()
    {
        return $this->_stmt->fetchAll(PDO::FETCH_COLUMN);
    }
}
  1. 将您的保湿剂添加到Doctrine配置文件中:
<?php
$em->getConfiguration()->addCustomHydrationMode('CustomHydrator','MyProject\Hydrators\CustomHydrator');
  1. 最后,您可以使用自定义保湿器:
<?php
$query = $em->createQuery('SELECT u FROM CmsUser u');
$results = $query->getResult('CustomHydrator');

0
投票

使用fetchAssoc获取数据:

$result = $db->query($query)->fetchAssoc(PDO::FETCH_COLUMN);

你会得到一个像这样的数组:

Array ( 
    [id] => 11
)
© www.soinside.com 2019 - 2024. All rights reserved.