Php 在Symfony 2中,使函数可用于所有存储库类的最佳方法是什么

Php 在Symfony 2中,使函数可用于所有存储库类的最佳方法是什么,php,symfony,orm,doctrine,Php,Symfony,Orm,Doctrine,我经常发现我想从查询中获得一个简单的ID数组。我现在这样做的方式是使用这个代码 $queryBuilder = $this->createQueryBuilder('s') ->select('s.id'); $result = $queryBuilder->getQuery()->getArrayResult(); // flatten the array $ids = array(); array_walk_recursive($result, f

我经常发现我想从查询中获得一个简单的ID数组。我现在这样做的方式是使用这个代码

$queryBuilder = $this->createQueryBuilder('s')
        ->select('s.id');

$result = $queryBuilder->getQuery()->getArrayResult();

// flatten the array
$ids = array();
array_walk_recursive($result, function ($a) use (&$ids) {$ids[] = $a;});

return $ids;
我觉得语法不容易记住,所以我想创建一个所有存储库类都可以访问的函数,允许我这样做

$queryBuilder = $this->createQueryBuilder('s')
    ->select('s.id');

return $this->getArrayIds($queryBuilder->getQuery()->getArrayResult());
我曾考虑使用一个服务类,但这似乎违背了一些设计模式,因为我必须向所有存储库类中注入一个服务容器或其他东西

最好的方法是什么

编辑:

如果有人感兴趣,下面是我根据接受的答案创建的类

<?php
namespace MyApp\MyBundle\ORM;

use Doctrine\ORM\EntityRepository as BaseEntityRepository;

class EntityRepository extends BaseEntityRepository
{
    /**
     * Flatten a QueryBuilder array of entity ids
     *
     * @param array $queryArray
     *
     * @return array | false
     */
    public function getQueryIds($queryArray)
    {
        $ids = array();

        if (array_walk_recursive($queryArray, function ($a) use (&$ids) {$ids[] = $a;})) {
            return $ids;
        } else {
            return false;
        }
    }
}

我认为您可以扩展
条令\ORM\EntityRepository
类,它是条令中的默认存储库类

namespace Your\Namespace;

use Doctrine\ORM\EntityRepository;

class MyEntityRepositoryClass extends EntityRepository {

    public function yourMethod() {
        // ... build query, execute, process etc.
    }

}
然后通过将选项设置为
My\Namespace\MyEntityRepository