2016-09-16 2 views
0

나는 Entity : Company에 컬럼이있다 : Type.열이 배열 인 경우 어떻게 수행합니까?

유형은 문자열 또는 문자열 배열 일 수 있습니다.

예 : 유형은 "Foo", "Bar"또는 배열 ("Foo", "Bar") 일 수 있습니다.

"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() ->() 대신 $ qb-> expr() -> like (...)를 시도했습니다.

유형 "Bar"가 포함 된 회사를 얻으려면 어떻게해야합니까? (유형에 3 가지 값 이상이 있다고 가정)

+1

이벤트를 교리는 데이터베이스 레벨에서, 당신이 배열 열 유형을 사용할 수 있지만 개별 배열 요소에 액세스 할 수 없습니다 (결국 텍스트의 한 묶음 일뿐입니다). 따라서 그러한 쿼리를 수행 할 수 없습니다. 정규식 쿼리 또는 데이터베이스 정규화의 두 가지 옵션이 있습니다. – Yoshi

+0

흥미 롭습니다. 데이터베이스를 정상화 할 수 없습니다. 정규 표현식은 어떻게 나를 도와 줄 수 있습니까? 모든 회사를 가져 와서 foreach 루프에서 유형을 테스트해야한다고 가정합니다. – abernard

+1

doctrine 배열 열 유형을 사용하려면 배열 값 안에 쉼표가 없어야합니다. 따라서 검색 할 수있는 모든 값은 열의 값만 필요하고 쉼표로 시작하거나 쉼표로 끝나거나 둘 다 필요합니다. 그리고이 네 가지 경우에 유효한 정규 표현식을 작성하고이를 여러분의 회로로 사용해야합니다. – Yoshi

답변

1

내가 주석에 쓴 것처럼 당신은 doctrines 배열 열을 사용할 때 단일 배열 값에 대해 질의 할 수 없습니다. 그러나 해당 열은 배열 값 내에서 쉼표를 사용하지 않아야하므로이 요구 사항을 사용하는 쿼리를 작성할 수 있습니다. 대신 (AN 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

관련 문제