我有一个实体'Order'和一对多关联实体'OrderStatus'(所以1个订单可以有很多状态)。订单的当前状态由添加到该订单的最后一个状态定义。
现在我想创建一个DQL查询,它选择具有特定状态的所有订单。但是,因为这是一对多的关系,所以我不知道如何在DQL中实现这一点。我只知道查询整个状态的集合。
是否有人知道这是否可能,或者我是否必须使用解决方法?
答案 0 :(得分:3)
在我们正在开展的项目中,我们遇到了同样的问题。您尝试执行的查询与this question非常相似,只是您尝试在DQL中执行此操作,这使得它更难。我认为(但我可能错了)DQL不允许这种查询,并且您可以通过native SQL查询获得期望的结果,这包含了所暗示的所有警告。
我们最终得到的是,我强烈建议您将当前状态设为Order
的属性。这样可以轻松实现快速查询,无需连接。这种变化真的很无痛:
class Order
{
/**
* @ManyToOne(targetEntity="OrderStatus")
*/
protected $status;
/**
* @OneToMany(targetEntity="OrderStatus")
*/
protected $statuses;
public function setStatus($status)
{
$orderStatus = new OrderStatus($this, $status);
$this->statuses->add($orderStatus);
$this->status = $orderStatus;
}
}
如果您的$status
基本上由状态字符串和日期组成,则 string
也可以是简单的OrderStatus
属性;然后代码将成为:
class Order
{
/**
* @Column(type="string")
*/
protected $status;
// ...
public function setStatus($status)
{
// ...
$this->status = $status;
}
}