2016-09-16 4 views
0

私はEntity:Companyを持っていますが、これには列:Typeがあります。列が配列の場合はどのようにするのですか?

Typeには、文字列または文字列の配列を指定できます。

例:タイプは "Foo"、 "Bar"、または配列( "Foo"、 "Bar")にすることができます。

"バー"が含まれているすべての会社を取得する方法を理解できません。

私は唯一のタイプは「バー」である企業ではなく、それは、配列(「フー」、「バー」)であるものをフェッチ

$qb = $this->companyRepository()->createQueryBuilder("c"); 
      $companies = $qb 
       ->select("c")  
       ->Where($qb->expr()->in('c.type', array($qb->expr()->literal('Bar')))) 
       ->getQuery() 
       ->getResult(); 

を試してみました。

$ qb-> expr() - > in(..)の代わりに$ qb-> expr() - > like(...)を同じ結果で試しました。

タイプ "バー"が含まれている会社を取得するにはどうすればよいですか? (タイプには例として挙げた3つの値以上のものがあります)

+1

イベントを教義は、データベースレベルで、あなたは、アレイ列型を使用することができますけれども個々の配列要素にアクセスすることはできません(結局のところ、テキストの塊です)。そのようなものとして、それらのクエリを実行することはできません。正規表現のクエリ、またはデータベースの正規化の2つのオプションがあります。 – Yoshi

+0

興味深い。データベースを正規化できません。正規表現はどのように私を助けることができますか?私はすべての企業を取得し、foreachループで型をテストする必要があると仮定します。 – abernard

+1

doctrine配列の列型では、配列の値の中にカンマがないことが必要です。ですから、あなたが検索できる値は、列内の値だけでなく、コンマで始まるか、カンマで終わるか、あるいはその両方でなければなりません。そして、これらの4つのケースでは、有効な正規表現を書いて、それをあなたのcirteriaとして使う必要があります。 – Yoshi

答えて

1

私がコメントに書いたように、doctrines配列列を使用するときは、単一​​の配列値に対してクエリを実行することはできません。しかし、これらの列では、配列の値の中でカンマを使用しないようにする必要があるため、この要件を使用するクエリを記述することは可能です。代わりに(doctrine extensionを必要とする)正規表現の

、あなたもそうのように、LIKEクエリを書くことができます:

$query = 'Bar'; 

$qb = $this->companyRepository()->createQueryBuilder("c"); 
$companies = $qb 
    ->where('c.type LIKE :only OR c.type LIKE :first OR c.type LIKE :last OR c.type LIKE :middle') 
    ->setParameter('only', $query) 
    ->setParameter('first', sprintf('%s%%,', $query)) 
    ->setParameter('last', sprintf('%%,%s', $query)) 
    ->setParameter('middle', sprintf('%%,%s,%%', $query)) 
    ->getQuery() 
    ->getResult() 
; 

dump($companies); 
0

答えは似たようなものです。

Symfony2 Doctrine querybuilder where IN

しかし、私はそれはオプションだか、単にPDOの代わりに、QueryBuilderと教義を使用している場合DQLを使用してお勧めします。

+0

私はあなたが私の質問を誤解していると思います。 – abernard

関連する問題