使用Doctrine获取多行单列数组

时间:2013-12-04 13:54:28

标签: php mysql pdo doctrine doctrine-query

我有像这样的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));

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

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

  1. 第一:制作自己的保湿剂
  2. <?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配置文件中:
    2. <?php
      $em->getConfiguration()->addCustomHydrationMode('CustomHydrator','MyProject\Hydrators\CustomHydrator');
      
      1. 最后你可以使用你的cutom hidrator:
      2. <?php
        $query = $em->createQuery('SELECT u FROM CmsUser u');
        $results = $query->getResult('CustomHydrator');
        

答案 2 :(得分:0)

使用fetchAssoc获取数据:

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

您将获得一个这样的数组:

Array ( 
    [id] => 11
)

答案 3 :(得分:0)

我发现了一个名为fetchFirstColumn的方法,似乎可以做到这一点。这可能是在更高版本的学说中添加的。我目前正在使用教义ORM 2.7.4。

我在Symfony中像这样使用它:

$statement = $connection->prepare('SELECT foo FROM bar WHERE baz = :baz');
$statement->execute([':baz' => 1]);
$result = $statement->fetchFirstColumn();

$ result的值将是一个从0开始的数字索引数组,如下所示:

[
    0 => 'foo1', 
    1 => 'foo2'
];