原则2 ORM -在一个多关系中搜索(QueryBuilder)


Doctrine 2 ORM - Search in oneToMany relation (QueryBuilder)

我正在尝试解决以下问题。

我有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:

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