2016-12-17 11 views
0

このクエリの目的は、まだ作成されていない出荷を持たないテーブルの注文からレコードを表示することです。これをSQLで行う方法を次に示します。結合されたテーブルがnullであるDoctrineの左結合は結果を示します

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; 

結果を表示していますか?それはなぜそれを修正するのですか?

+0

、ANDWhereが間違って大文字にし、多分問題はないthatsの。 –

+0

'echo $ qb-> getQuery();' – goto

+0

-_dqlの出力は何ですか?「OrderBundle \ Entity \ Ordersからの出荷を選択してください」LEFT JOIN orders.shipments配送先wherements.ids IS NULLおよびorders.purchaseDate IS NOT NULLおよびorders.fulfillmentChannel =:a " – user1029829

答えて

1

なぜ私は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(); 
関連する問題