Maison > base de données > tutoriel mysql > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-23 23:50:29
original
757 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal