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

Comment joindre des sous-requêtes avec Doctrine 2 DBAL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 23:50:29669parcourir

How to Join Subqueries with Doctrine 2 DBAL?

Joindre des sous-requêtes avec Doctrine 2 DBAL

Introduction

Lors de la migration d'une application Zend Framework vers Doctrine 2.5 DBAL, vous pouvez rencontrer des difficultés pour rejoindre des sous-requêtes. Cet article vise à fournir un guide complet sur ce problème spécifique.

Le problème

La requête Zend_Db donnée comporte une sous-requête pour récupérer les horodatages minimaux pour des enquêtes utilisateur spécifiques. La requête principale rejoint ensuite cette sous-requête pour récupérer des données supplémentaires. L'objectif est de reproduire cette fonctionnalité à l'aide du générateur de requêtes de Doctrine 2.5.

Rejoindre des sous-requêtes dans Doctrine 2.5

Au départ, on pensait que Doctrine ne prenait pas en charge la jointure de sous-requêtes. Cependant, il existe une solution de contournement.

Solution

La solution consiste à obtenir le SQL brut de la sous-requête et à le mettre entre parenthèses. La syntaxe de jointure ressemble à une opération de jointure classique. Cependant, les paramètres utilisés dans la sous-requête doivent être définis dans la requête principale.

Extrait de code

<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>

Conclusion

Cette solution de contournement vous permet de joindre des sous-requêtes dans Doctrine 2.5 DBAL . En obtenant le SQL brut de la sous-requête et en définissant ses paramètres dans la requête principale, vous pouvez obtenir la structure de requête souhaitée.

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