Maison  >  Article  >  base de données  >  Comment rejoindre des sous-requêtes dans Doctrine 2 DBAL ?

Comment rejoindre des sous-requêtes dans Doctrine 2 DBAL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 03:58:02613parcourir

How to Join Subqueries in Doctrine 2 DBAL?

Rejoindre une sous-requête avec Doctrine 2 DBAL

Cet article explore le processus de jonction de sous-requêtes dans Doctrine 2. DBAL. Bien que Doctrine 2 soit connu pour ne pas prendre en charge les jointures de sous-requêtes, cet article présente une solution de contournement utilisant createQueryBuilder() de la connexion DBAL.

Le code précédent peut être adapté pour utiliser le générateur de requêtes de Doctrine 2 DBAL :

<code class="php">$subSelect = $connection->createQueryBuilder()
    ->select(array('userSurveyID', 'MIN(timestamp) timestamp'))
    ->from('user_survey_status_entries')
    ->where('status = :status')
    ->groupBy('userSurveyID');

$select = $connection->createQueryBuilder()
    ->select($selectColNames)
    ->from('user_surveys', 'us')
    ->leftJoin('us', sprintf('(%s)', $subSelect->getSQL()), 'firstAccess', 'us.userSurveyID = firstAccess.userSurveyID')
    ->setParameter('status', UserSurveyStatus::ACCESSED)
    ->where('us.surveyID = :surveyID')
    ->setParameter('surveyID', $surveyID);</code>

Dans cette solution de contournement, la sous-requête est construite à l'aide de createQueryBuilder() sur la connexion, et non du gestionnaire d'entités, et son SQL est placé entre parenthèses. Il est ensuite joint à la requête principale à l'aide de leftJoin(), et le paramètre utilisé dans la sous-requête est défini dans la requête principale à l'aide de setParameter().

En suivant ces étapes, vous pouvez effectivement joindre des sous-requêtes dans Doctrine 2. DBAL, même si la prise en charge directe des sous-requêtes n'est pas disponible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn