Questions sur PDO et les jointures

Eléphanteau du PHP | 11 Messages

13 nov. 2014, 08:57

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 :

Code : Tout sélectionner

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 :

Code : Tout sélectionner

$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" :

Code : Tout sélectionner

array (size=16) 'id' => string '1' (length=1) 'username' => string 'micka' (length=9) 'name' => string 'mickael' (length=7) 'mail' => string '[email protected]' (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 journée.

ViPHP
ViPHP | 928 Messages

19 nov. 2014, 00:53

Tu m'as tout l'air d'avoir besoin d'utiliser un ORM, Doctrine 2 est très bien, et te permettra en plus de pas mal progresser en PHP puisque c'est de l'objet à 110%.