如何在Doctrine 2中为1:1关系指定多个连接条件

zer*_*kms 7 php doctrine doctrine-orm

文件说明:

class Cart
{
    // ...

    /**
     * @OneToOne(targetEntity="Customer", inversedBy="cart")
     * @JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

这个注释代表了这样的sql:

JOIN Customer c ON c.id = cart.customer_id
Run Code Online (Sandbox Code Playgroud)

问题是我需要在那里添加额外的比较,例如:

JOIN Customer c ON c.id = cart.customer_id AND c.anotherField = <constant>
Run Code Online (Sandbox Code Playgroud)

有什么解决方案吗?

UPD:

我现在需要的真正的附加条件是 <const> BETWEEN c.f1 AND c.f2

jer*_*ere -1

您可以使用关键字指定其他连接条件,如某些示例WITH中所示。

我认为这应该让你继续:

SELECT l, c FROM location
INNER JOIN Customer c
WITH CURRENT_TIMESTAMP() BETWEEN c.f1 AND c.f2
WHERE CURRENT_TIMESTAMP() BETWEEN l.f1 AND l.f2
Run Code Online (Sandbox Code Playgroud)

我删除了该ON子句,因为我认为不需要显式指定连接的ON字段,除非它们不是“标准”字段(每个实体的 ID)

还要注意对CURRENT_TIMESTAMP()which 的调用会转换为 MySQL 的NOW(). 在此处查看其他非常有用的聚合函数和表达式的列表

  • 并没有真正回答问题。假设您只想要活动记录,您可以用符号表达吗?或者请解释如何使用该 DQL 块来填充实体的属性。 (2认同)