Bonjour à toutes et tous,

J'ai un framework au sein duquel j'utilise l'objet PDO pour effectuer tout ce qui est requête SQL. J'aimerais améliorer ma méthode en "automatisant" la gestion des requêtes "multi-table". De manière générale j'utilise le LEFT JOIN dans mes SELECT.

Voici un exemple de requête :

SELECT users.*, profils.fields, userjoin.nom_jointure FROM pref_users AS users LEFT JOIN prefs_profils AS profils ON profils.uid = users.id LEFT JOIN pref_userjointures AS userjoin ON userjoin.uid = users.id

J’exécute la requête avec PDO :

$pdo_q = $pdo->prepare($requete); //celle citée en exemple
$pdo_q->execute($conditions);
$donnees = (array) $pdo_q->fetch(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$pdo_q->closeCursor();

et voici le contenu de l'array "$donnees" :

array (size=16)
  'id' => string '1' (length=1)
  'username' => string 'micka' (length=9)
  'name' => string 'mickael' (length=7)
  'mail' => string 'mickael@laposte.net' (length=27)
  'state' => string '1' (length=1)
  'registration' => string '0' (length=1)
  'last_connection' => string '0' (length=1)
  'fields' => string '{}' (length=2)
  'nom_jointure' => string 'polo' (length=4)

Alors j'ai deux questions qui auront tendance à se rejoindre :

la 1ère : au niveau du tableau "donnees", y a t'il un moyen pour regrouper les champs par "tables" dans des sous-tableau ? j'ai fais des recherches au niveau des paramètres de la méthodes "fetch", au niveau d'autres méthodes de PDO, avec des GROUP BY... pas moyen.
Je sais que le framework CakePHP le fait mais je n'arrive pas à voir comment.

la 2ème : si jamais un des critères n'est pas respecté au niveau d'une des tables, comment faire pour que les données des autres tables soit tout de même retournées ??

Merci d'avance pour votre aide et bonne fin de soirée.

1 réponse


Bonsoir,

pour la question 1 , regarde le fichier lib/Cake/Model/DataSource/DboSource.php

notamment toutes les méthodes merge.. merge_hasmany, merge_association etc...

Pour la deuxième je n'ai pas vraiment compris la question ...
Si tes conditions SQL ne sont pas vérifiées, pourquoi attendre des résultats?