2013-03-02 71 views
5

我試圖篩選出在父母由一個複合主鍵的孩子,家長被稱爲主體和孩子的課程:學說2組合鍵和DQL加入

主題:

class Subject 
{ 
    /** 
    * @var integer 
    * 
    * @Column(type="integer") 
    * @Id 
    * @GeneratedValue(strategy="NONE") 
    */ 
    protected $id; 

    /** 
    * @var integer 
    * 
    * @Column(type="integer") 
    * @Id 
    */ 
    protected $customer_id; 

    /** 
    * @var ArrayCollection 
    * 
    * @OneToMany(targetEntity="Course", mappedBy="subject") 
    */ 
    private $courses; 

    ... 
} 

課程:

class Course 
{ 
    ... 

    /** 
    * @var Subject 
    * 
    * @ManyToOne(targetEntity="Subject", inversedBy="courses") 
    * @JoinColumns({ 
    * @JoinColumn(name="subject_id", referencedColumnName="id"), 
    * @JoinColumn(name="subject_customer_id", referencedColumnName="customer_id") 
    * }) 
    */ 
    private $subject; 
} 

我有「subject_id」和「subject_customer_id」,我的問題是,我不能過濾掉的課程不加入主題,當我寫這篇文章:

$this->em->createQuery("SELECT c FROM Course c WHERE c.subject = :subject") 
    ->setParameters(array('subject' => array('subject_id' => $subject_id, 'subject_customer_id' => $subject_customer_id))) 
    ->getResult(); 

我收到以下錯誤:

Doctrine\ORM\Query\QueryException [ 0 ]: A single-valued association path expression to an entity with a composite primary key is not supported. Explicitly name the components of the composite primary key in the query.

唯一爲什麼我能得到這個工作是由內側連接問題,例如:

$this->em->createQuery("SELECT c FROM Course c INNER JOIN c.subject s WITH s.id = :subject AND s.customer_id = :customer") 
    ->setParameters(array('subject' => $subject_id, 'customer' => $customer_id)) 
    ->getResult(); 

有什麼辦法來檢索基於主題主鍵的課程無需加入主題?

回答