gpt4 book ai didi

php - Doctrine 2 复合键和 DQL 连接

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:01 24 4
gpt4 key购买 nike

我试图过滤掉父项由复合主键组成的子项,父项称为主题,子项是类(class):

主题:

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):

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”,我的问题是我无法在不加入主题的情况下过滤掉类(class),当我写这个时:

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

有没有办法在不加入学科的情况下根据学科主键检索类(class)?

最佳答案

截至当前日期,此逻辑为 not yet supported by DQL (另请参见 https://github.com/doctrine/doctrine2/blob/2.3.2/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php#L1641-L1643)。

你必须加入类似这样的东西:

SELECT
c
FROM
Course c
INNER JOIN
c.subject s
WHERE
s.id = :subject
AND
s.customer_id = :customer

考虑通过最终添加这样的逻辑来为项目做出贡献:它可能会合并到新的 2.4 系列中。

关于php - Doctrine 2 复合键和 DQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com