1
私はしばしばクエリからIDの単純な配列を取得したいと思っています。私は、現時点ではこれを行う方法は、このコードSymfony 2では、すべてのリポジトリクラスで関数を利用できるようにする最良の方法は何ですか
$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());
ような何かを、私はサービスクラスを使用して考えたが、私はすべてのリポジトリクラスにサービスコンテナや何かを注入する必要があるだろうと、それはいくつかのデザインパターンに反するように、それはそうです。
これを行うにはどうすればよいでしょうか?
編集:いずれかが興味を持っている場合は
、ここで私は、私はあなたがデフォルトのリポジトリクラスが教義であるDoctrine\ORM\EntityRepository
クラスを拡張することができると考えて
<?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;
}
}
}