親が複合主キーで構成され、親がサブジェクトと呼ばれ、子がコースである子を除外しようとしています:
主題:
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 ]: 複合主キーを持つエンティティへの単一値の関連付けパス式はサポートされていません。クエリで複合主キーのコンポーネントに明示的に名前を付けます。
これを機能させることができる唯一の理由は、内部結合サブジェクトによるものです。例:
$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();
サブジェクトに参加せずに、サブジェクトの主キーに基づいてコースを取得する方法はありますか?