Php 使用条令筛选相关表上的行

Php 使用条令筛选相关表上的行,php,doctrine,symfony,Php,Doctrine,Symfony,我对Doctrine/Symfony很陌生,我很紧张,因为我不知道怎么做 我有两个由一个外键关联的表 Product: id, name, stock Order: id, date, productId, quantity, sent 我可以通过$produt->getOrders()获得一个产品的所有订单,但我只希望获得待发送的订单 我该怎么做 谢谢。如果您需要许多产品的所有订单,您可以使用QueryBuilder: $this->createQueryBuilder('order'

我对Doctrine/Symfony很陌生,我很紧张,因为我不知道怎么做

我有两个由一个外键关联的表

Product: id, name, stock
Order: id, date, productId, quantity, sent
我可以通过
$produt->getOrders()
获得一个产品的所有订单,但我只希望获得待发送的订单

我该怎么做


谢谢。

如果您需要许多产品的所有订单,您可以使用
QueryBuilder

$this->createQueryBuilder('order')
->join('order.productId', 'order')
->where('order.sent = :sentStatus')->setParameter('sentStatus', true)
->getQuery()
->getResult();
如果您已经拥有产品对象/实体,并且希望选择每个产品的订单:

$this->createQueryBuilder('order')
->join('order.productId', 'order')
->where('order.sent = :sentStatus')->setParameter('sentStatus', true)
->where('product = :productEntity')->setParameter('productEntity', $productEntity)
->getQuery()
->getResult();
如果不想使用
QueryBuilder
,可以循环或筛选订单集合:


阅读并了解它

您可以通过两种方法来实现这一点:

首先是像这样使用QueryBuilder(我推荐):

请参阅参考资料


其次是DQL(条令查询语言)。有关用法,请参阅参考资料。它与SQL非常相似,可以利用php名称空间。

最好知道您的Symfony/Doctrine实体是什么样子的。由于ORM框架原则,您不必关心数据库的表示,而需要关心实体的表示。使用Doctrine,您可以使用名称空间和实体属性创建查询。
class SomeServiceOrController() { 

    function getOrdersPending($productId) {

        return $this->getEntityManager()->createQueryBuilder()
            ->select('order')
            ->from('\AppBundle\Order', 'order') // or whatever your namespace your Entity is
            ->join('order.productId', 'product')
            ->where('order.productId =: productParam')
            ->andWhere('order.sent = :sentParam')
            ->setParameter('productParam', $productId)
            ->setParameter('sentParam', 'pending')
            ->getQuery()
            ->getResult;
    }
}