2012-06-26 3 views
2

얘들 아 난 다음 두 개의 엔티티가 있습니다. 내 formBuilder에서 $ QB 얻을교리 쿼리 빌더 오류

public function getCustomFieldsNotUsed($idInquerito) { 

     $qb = $this->getEntityManager()->createQueryBuilder(); 
     $qb2 = $this->getEntityManager()->createQueryBuilder(); 

     $qb->select('cf') 
       ->from('CareAdminBundle:DbaCustomFields', 'cf') 
       ->where($qb->expr()->notIn('cf.id', $qb2->select('ief.idCustomField') 
           ->from('CareAdminBundle:CarInqueritoExtraFields', 'ief') 
           ->where('ief.idInquerito = :idInquerito') 
           ->getDQL())) 
       ->setParameter('idInquerito', $idInquerito); 

     return $qb; 
    } 

: 내 DbaCustomFieldsRepository에서 다음과 같은 방법이

public function buildForm(FormBuilder $builder, array $options){ 

     $id_inquerito = $this->id_inquerito; 
     $builder->add('idCustomField', 'entity', array(
        'empty_value' => 'Escolha um campo', 
        'class' => 'Care\AdminBundle\Entity\DbaCustomFields', 
        'required' => false, 
        'query_builder' => function(\Care\AdminBundle\Repository\DbaCustomFieldsRepository $repository) use ($id_inquerito){ 
         return $repository->getCustomFieldsNotUsed($id_inquerito); 
        }));  
    } 

을하지만 난이 오류가 발생했습니다하지만 난 이유를 알아 냈 캔트 :

:: 19.html.twig에서 템플릿을 렌더링하는 동안 예외가 throw되었습니다 ("{Semantical Error] 행 0, '80 idCustomField': Error : 잘못된 PathExpression, StateFieldPathExpression이어야합니다. ').

문제는 내 QueryBuilder에 있어야한다고 생각하지만 이유는 모르겠다. 도움을 주시면 감사하겠습니다! 감사 :

---------------------------------- 업데이트 ----- ---------------------------------------- 음, 나는 그 솔루션을 얻을 수있을 것입니다. 적절한 방법은 아니지만 잘 작동합니다. 문제는 querybuilder에, 그래서 나는이 한 : 사람이 더 나은 방법을 얻을 경우

//First i pick the CarInqueritoExtraFields By IdInquerito and save the idCustomField from the retrieved object in a array. 

$em = $this->getEntityManager(); 
     $carInqueritoExtraFieldsByIdInquerito = $em->getRepository('CareAdminBundle:CarInqueritoExtraFields')->findByIdInquerito($idInquerito); 
     $arrayExtraFields = array(); 
     foreach ($carInqueritoExtraFieldsByIdInquerito as $extraField) { 
     array_push($arrayExtraFields, $extraField->getIdCustomField()->getId()); 
    } 

//Then this: 
$qb->select('cf') 
      ->from('CareAdminBundle:DbaCustomFields', 'cf') 
       ->where($qb->expr()->notIn('cf.id', $arrayExtraFields)); 

,

답변

2

당신은 완전히 잘못된 둥지 querybuilders에 노력하고 나를 :) 말해 주시기를 교의. 대신에 조인을 사용하십시오.