use*_*829 5 doctrine symfony doctrine-orm
此查询的目标是显示尚未创建任何发货的表订单中的记录。以下是在 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';
Run Code Online (Sandbox Code Playgroud)
以下查询显示 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;
Run Code Online (Sandbox Code Playgroud)
显示结果。为什么会这样以及如何解决?
不知道为什么,但我不得不使用 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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6473 次 |
最近记录: |