Я пытаюсь отфильтровать детей, где родитель состоит из составного первичного ключа, родительский называется предмет, а дети это курсы:Doctrine 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();
Есть ли способ, чтобы получить курсы, основанные на предметных первичных ключах без присоединения к теме?