我正在尝试解决以下问题。
我有OrderEntity和在OrderEntity是关系到OrderStatusHistory (OneToMany)。
/**
* @ORM'OneToMany(targetEntity="OrderStatusHistory", mappedBy="order")
*/
protected $statuses;
OrderStatusHistory实体:
class OrderStatusHistory extends BaseEntity
{
/**
* @ORM'ManyToOne(targetEntity="Order",cascade={"persist"})
* @ORM'JoinColumn(name="order_id", referencedColumnName="id")
**/
protected $order;
/**
* @ORM'ManyToOne(targetEntity="OrderStatus",cascade={"persist"})
* @ORM'JoinColumn(name="status_id", referencedColumnName="id")
**/
protected $status;
/**
* @ORM'Column(type="datetime")
*/
protected $time;
public function __construct()
{
$this->time = new 'DateTime('now');
}
}
现在我需要选择order where was last status with ID 4。我尝试了许多QB的变体,但它们中的任何一个都不起作用。
有几种方法,您可以连接到该表并使用WITH,或者您可以使用WHERE
,或者您可以直接使用ID。下面是一些例子:
$dql = "SELECT o
FROM Order o
WHERE o.orderStatus = 4"
或
$dql = "SELECT o
FROM Order o
INNER JOIN o.orderStatus orderStatus
WITH orderStatus.id = 4"
或:
$dql = "SELECT o
FROM Order o
INNER JOIN o.orderStatus orderStatus
WHERE orderStatus.id = 4"
或查询生成器:
$queryBuilder->select('o')
->from('Order', 'o')
->where('o.orderStatus = 4');