2016-05-24 2 views
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; 
     } 
    } 
} 

答えて

3

受け入れ答えに基づいて作成されたクラスがあります。

namespace Your\Namespace; 

use Doctrine\ORM\EntityRepository; 

class MyEntityRepositoryClass extends EntityRepository { 

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

} 

その後My\Namespace\MyEntityRepository

default_repository_classオプションを設定することで、デフォルトのリポジトリクラスとしてusethisクラスに教義を設定
関連する問題