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