Doctrine QueryBuilderクエリ:複数の関連付けがあります

Arne

中古車の検索フォームを作成しています。フォームでは、ユーザーは車に必要なオプションのチェックボックスを選択できます。ユーザーは複数のオプションを選択できるため、ユーザーが選択したすべてのオプションを備えた車を検索する必要があります。

'car'に選択されたオプションがあるかどうかをチェックするクエリを作成しようとしています。現在、次の手順を実行して、選択したオプションの1つが車にあるかどうかを確認できません。

// The options filter is something special, the parameter is passed as a comma separated
// String with options ids
        if($param == 'car.options' && $optionsIds){
            $queryBuilder->leftJoin('car.options', 'option');
            $options        = $queryBuilder->expr()->orX();
            foreach(explode(',', $optionsIds) as $id) {
                $options->add($queryBuilder->expr()->eq('option.id', $id));
            }
            $wheres->add($options);
            continue;
        } 

しかし、「orX」を「andX」に変更すると、結果は常に空で返されます。

上記のコードスニペットは、より大きな関数の一部です。

Arne

私はついにそれを機能させることができました。トリックはサブクエリを使用することでした:

$carsWithSelectedOptions = $this->getEntityManager()->createQuery('
    SELECT c.id
    FROM Occasions\Model\Bo\Car AS c JOIN c.options o
    WHERE o.id IN ('.$optionsIds.')
    AND c.id = car.id
    GROUP BY c.id
    HAVING COUNT(o.id) >= '.count(explode(',', $optionsIds))
);

$wheres->add($queryBuilder->expr()->exists($carsWithSelectedOptions->getDQL()));

これはより大きなクエリの一部であることに注意してください。完全なクエリの結果は次のとおりです。

SELECT advert, customer, car, country, brand, model 
FROM Occasions\Model\Bo\Advert advert 
LEFT JOIN advert.customer customer 
LEFT JOIN advert.car car 
LEFT JOIN customer.country country 
LEFT JOIN car.model model 
LEFT JOIN car.brand brand 
WHERE EXISTS( 
    SELECT c.id FROM Occasions\Model\Bo\Car AS c 
    JOIN c.options o WHERE o.id IN (2,4,5,51) 
    AND c.id = car.id GROUP BY c.id HAVING COUNT(o.id) >= 4)
AND brand.id = :brandid 
AND model.id = :modelid
AND country.country_code = :countrycountry_code

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Doctrine QueryBuilder "andWhere"クエリ

分類Dev

Custom QueryBuilder in Doctrine

分類Dev

datetime comparaison doctrine querybuilder

分類Dev

datetime comparaison doctrine querybuilder

分類Dev

datetime comparaison doctrine querybuilder

分類Dev

doctrine symfony2エラー:Class Kitchen \ PurchasesBundle \ Entity \ Productsには、suppliersという名前の関連付けがありません

分類Dev

誰かがDoctrine(QueryBuilder)を使用してこのクエリを行う方法を複数の「where」句で提案できますか?

分類Dev

Doctrine [セマンティックエラー]エラー:クラスxxxにはyyyという名前のフィールドまたは関連付けがありません

分類Dev

継承と関連付けのシナリオからのDoctrineクエリの問題

分類Dev

Doctrineの今年

分類Dev

Symfony 3.4 / Doctrine21対1の関連付けエラー

分類Dev

Doctrine Symfony2 は既存のものとの関連付けエンティティを保持します

分類Dev

doctrine2 querybuilder not between

分類Dev

Doctrine paginator not working with count in querybuilder

分類Dev

SQL to Doctrine's QueryBuilder conversion

分類Dev

Doctrine-日付範囲のクエリ

分類Dev

Doctrine querybuilderは、leftJoinとの1対多の関係ですべてのレコードを返すわけではありません

分類Dev

Doctrine ORMのUPDATEクエリにLIMITを追加する方法はありますか?

分類Dev

QueryBuilderのようなSymfonyOneToOne Doctrine

分類Dev

Doctrine QueryBuilderで複数の列を検索する

分類Dev

Symfony2-スラッグで投稿を見つけるためのDoctrineクエリにエラーがあります

分類Dev

ZF2、Doctrine2、Gedmo-関連付けのあるSoftDeleteJTIエンティティ

分類Dev

Symfony-Doctrine Single Table InheritanceManyToOneと親エンティティとの関連付け

分類Dev

Doctrine ODMに関連ドキュメントをロードすると、クエリが多すぎます

分類Dev

Doctrine MongoDBODM検索クエリ

分類Dev

タイプ「Doctrine \ ORM \ QueryBuilder」の引数が必要です

分類Dev

Doctrine-QueryBuilder:クエリが結果を返すかどうかを確認します(カウント)

分類Dev

Doctrineとの関連を削除する

分類Dev

Doctrine2-1つのクエリに複数の挿入

Related 関連記事

  1. 1

    Doctrine QueryBuilder "andWhere"クエリ

  2. 2

    Custom QueryBuilder in Doctrine

  3. 3

    datetime comparaison doctrine querybuilder

  4. 4

    datetime comparaison doctrine querybuilder

  5. 5

    datetime comparaison doctrine querybuilder

  6. 6

    doctrine symfony2エラー:Class Kitchen \ PurchasesBundle \ Entity \ Productsには、suppliersという名前の関連付けがありません

  7. 7

    誰かがDoctrine(QueryBuilder)を使用してこのクエリを行う方法を複数の「where」句で提案できますか?

  8. 8

    Doctrine [セマンティックエラー]エラー:クラスxxxにはyyyという名前のフィールドまたは関連付けがありません

  9. 9

    継承と関連付けのシナリオからのDoctrineクエリの問題

  10. 10

    Doctrineの今年

  11. 11

    Symfony 3.4 / Doctrine21対1の関連付けエラー

  12. 12

    Doctrine Symfony2 は既存のものとの関連付けエンティティを保持します

  13. 13

    doctrine2 querybuilder not between

  14. 14

    Doctrine paginator not working with count in querybuilder

  15. 15

    SQL to Doctrine's QueryBuilder conversion

  16. 16

    Doctrine-日付範囲のクエリ

  17. 17

    Doctrine querybuilderは、leftJoinとの1対多の関係ですべてのレコードを返すわけではありません

  18. 18

    Doctrine ORMのUPDATEクエリにLIMITを追加する方法はありますか?

  19. 19

    QueryBuilderのようなSymfonyOneToOne Doctrine

  20. 20

    Doctrine QueryBuilderで複数の列を検索する

  21. 21

    Symfony2-スラッグで投稿を見つけるためのDoctrineクエリにエラーがあります

  22. 22

    ZF2、Doctrine2、Gedmo-関連付けのあるSoftDeleteJTIエンティティ

  23. 23

    Symfony-Doctrine Single Table InheritanceManyToOneと親エンティティとの関連付け

  24. 24

    Doctrine ODMに関連ドキュメントをロードすると、クエリが多すぎます

  25. 25

    Doctrine MongoDBODM検索クエリ

  26. 26

    タイプ「Doctrine \ ORM \ QueryBuilder」の引数が必要です

  27. 27

    Doctrine-QueryBuilder:クエリが結果を返すかどうかを確認します(カウント)

  28. 28

    Doctrineとの関連を削除する

  29. 29

    Doctrine2-1つのクエリに複数の挿入

ホットタグ

アーカイブ