symfony - Doctrine left join wherejoined table is null 显示结果

标签 symfony doctrine-orm doctrine

此查询的目标是显示尚未创建任何发货的订单表中的记录。以下是在 SQL 中应该如何完成:

SELECT *
FROM orders 
LEFT JOIN orders_shipments shipments ON orders.trx_id = shipments.trx_id
WHERE shipments.shipment_id IS NULL 
AND orders.purchase_date IS NOT NULL 
AND orders.fulfillment_channel = 'MFN';

以下查询显示 0 个结果。对比以下:
$qb = $this->createQueryBuilder('orders');
        $qb->select('orders, shipments')
        ->leftjoin('orders.shipments', 'shipments')
        ->Where('shipments.id IS NULL')
        ->ANDWhere('orders.purchaseDate IS NOT NULL')
        ->ANDWhere('orders.fulfillmentChannel = :a')->setParameter('a', 'MFN');;
        $results = $qb->getQuery()
        ->getResult();
        return $results;

显示结果。为什么会这样以及如何解决?

最佳答案

不知道为什么,但我不得不使用 GROUP 和 HAVING 来让它工作:

$qb = $this->createQueryBuilder('orders');
        $qb->select('orders, shipments')
        ->leftjoin('orders.shipments', 'shipments')
        ->Where('shipments.id IS NULL')
        ->ANDWhere('orders.purchaseDate IS NOT NULL')
        ->ANDWhere('orders.fulfillmentChannel = :a')->setParameter('a', 'MFN')
        ->GroupBy('orders.id')
        ->having('count(shipments) = 0');
        $results = $qb->getQuery()->getResult();

关于symfony - Doctrine left join wherejoined table is null 显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41195534/

相关文章:

symfony - 如何在奏鸣曲管理中基于另一个表单字段创建动态表单字段?

javascript - Symfony2 - 更改页面内容 - 像 Ajax

image - Symfony 2 Assets 图片

php - 将 SQL 查询转换为 Doctrine,Error

Symfony2 选择学说中的一列

sql - Doctrine ORM - 自连接,没有任何实际关系

mongodb - Symfony 2 StofDoctrineExtensionBundle 时间戳与 odm (MongoDB)

php - 无法使用 php7 和 symfony 3 加载 mongodb fixtures

php - 具有 X num 个关系属性的动态过滤器查询 - Doctrine Symfony2

php - SQLSTATE[23000] : Integrity constraint violation: 1048 Column 'profile_percentage' cannot be null on doctrine