我有这样的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));
您可以简单地使用PDO功能(至少如果您有MySQL)。
$ids = $db
->executeQuery($query)
->fetchAll(\PDO::FETCH_COLUMN)
;
要解决此问题,您必须制作自定义doctrine保湿器。
<?php
namespace MyProject\Hydrators;
use Doctrine\ORM\Internal\Hydration\AbstractHydrator;
class CustomHydrator extends AbstractHydrator
{
protected function _hydrateAll()
{
return $this->_stmt->fetchAll(PDO::FETCH_COLUMN);
}
}
<?php
$em->getConfiguration()->addCustomHydrationMode('CustomHydrator','MyProject\Hydrators\CustomHydrator');
<?php
$query = $em->createQuery('SELECT u FROM CmsUser u');
$results = $query->getResult('CustomHydrator');
使用fetchAssoc获取数据:
$result = $db->query($query)->fetchAssoc(PDO::FETCH_COLUMN);
你会得到一个像这样的数组:
Array (
[id] => 11
)