14

dql を使用して、エンティティがコレクション サブエンティティのメンバーであるかどうかを確認しようとしました

エンティティ:

       product
       customer

       customer.orders (collection)
       customer.orders.products (collection, type: product)
       customer.cancellations.productContainers (collection)
       customer.cancellations.productContainers.product (entity, type: product)

顧客は複数の注文を持っています。注文には複数の商品があります。顧客は複数のキャンセルを持っています。キャンセルには複数の productContainers があります。productContainer には製品があります。

問題

キャンセルされていない注文商品をすべて入手したい。

       $qb->select('c, d, p')
       ->from('XyzBundle:Customer', 'c')
       ->leftJoin('c.orders', 'co')
       ->leftJoin('co.products', 'cop')
       ->leftJoin('c.cancellation', 'ca')
       ->leftJoin('ca.productContainers', 'cap')
       ->leftJoin('cap.product', 'capp')
       ->andWhere('cop NOT MEMBER OF capp')

ただし、ca.productContainers はコレクション フィールドであり、その supentity ca.productContainers.product ではないため、これは機能しません。したがって、次のエラーが発生します。

       CRITICAL - Uncaught PHP Exception Doctrine\ORM\Query\QueryException: 
       "[Semantical Error] line 0, col 414 near 'product': Error: Invalid PathExpression. 
       Must be a CollectionValuedAssociationField." at 
       /vagrant/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php line 4 9

これを解決する方法はありますか?

4

1 に答える 1