Php 在Symfony 2中,使函数可用于所有存储库类的最佳方法是什么
我经常发现我想从查询中获得一个简单的ID数组。我现在这样做的方式是使用这个代码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
$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