2013-03-02 17 views
5

Ben ebeveyn bileşik birincil anahtar oluşur çocukları filtrelemek çalışıyorum katılır, üst konu denir ve çocukların dersleri geçerli:Doktrini 2 kompozit anahtarları ve DQL

Konu:

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; 

    ... 
} 

Ders: Ben "subject_id" ve "subject_customer_id" var

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

, benim sorunum ben bu yazarken ben, konuyu katılmadan da ders filtrelemeyen olmasıdır:

$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(); 

aşağıdaki hatayı alıyorum:

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.

sadece bu çalışma iç birleştirme konu, örnek gereğidir alabilirsiniz nedenleri: almak için herhangi bir yolu var mı

$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(); 

Konuya katılmadan konu birincil anahtarlara dayalı dersler?

cevap