2012-06-26 44 views
2

嗨,我有接下來的兩個實體:主義查詢生成器錯誤

class CarInqueritoExtraFields 
{ 
/** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

/** 
    * @var DbaCustomFields 
    * 
    * @ORM\ManyToOne(targetEntity="DbaCustomFields", inversedBy="inqueritoExtraFields") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_custom_field", referencedColumnName="id", onUpdate="cascade", onDelete="cascade", nullable = false) 
    * }) 
    */ 
    private $idCustomField; 
} 

class DbaCustomFields 
{ 
/** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="CarInqueritoExtraFields", mappedBy="idCustomField", cascade={"persist"}) 
    */ 
    private $inqueritoExtraFields; 

    /** 
    * @var integer $idContacto 
    * 
    * @ORM\Column(name="nome", type="string", nullable=true) 
    */ 
    private $nome; 
} 

這些實體雙方都有獲取/套。 我在DbaCustomFieldsRepository下面的方法:

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; 
    } 

我得到了我的formBuilder $ QB:

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行的:: base.html.twig中渲染模板期間(「[Semantical Error] line 0,col 80 near'idCustomField':Error:Invalid PathExpression。Must must StateFieldPathExpression。」),拋出異常。

我覺得問題應該在我的QueryBuilder中,但我不知道爲什麼.. 任何幫助表示讚賞! THANKS :)

---------------------------------- UPDATE ----- ---------------------------------------- 那麼我設法得到解決方案,也許不是正確的方式,但它的工作原理。 問題是在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,這完全是無效的教義。改爲使用連接。