Er is geen ondersteuning voor de rechtstreeks in PDO voor zover ik weet. Als u een complexe objectgrafiek moet maken op basis van het resultaat van een query, is dat doorgaans de verantwoordelijkheid van een ORM.
Als je deze functionaliteit nodig hebt, raad ik aan om Doctrine te gebruiken of Propel in plaats van zelf iets te schrijven. Er zijn ook andere die misschien lichter zijn, maar daar heb ik geen ervaring mee.
BEWERKEN:
Ik denk dat ik de vraag misschien verkeerd heb begrepen, zoals ik zeker weet dat anderen dat kunnen. Ik denk dat de echte vraag was hoe toegang te krijgen tot de samengevoegde kolommen, niet per se hoe je er een object van kunt maken.
Gebruik in dat geval gewoon een standaard arry fethc-methode zoals PDO::FETCH_ASSOC
, PDO::FETCH_NUMERIC
of PDO::FETCH_BOTH
geeft u alle kolommen die u hebt opgevraagd.
Dus als je daar een "objectgrafiek" van wilt maken, moet je dat handmatig doen en niet met PDO::FETCH_CLASS
.
Bijvoorbeeld:
//$db is pdo:
// also notice im aliase the columns prefixing the name so that we can tell what belongs to
// post and what belongs to user, an alternative approach would be to use FETCH_NUMERIC,
// which just uses the column positions from the seelct statement as the keys
// so in this case post.id would be in the array as key 0, and user.name would be in the
// array as key 4
$stmt = $db->prepare('SELECT post.id as p_id,
post.text as p_text,
post.user_id as p_user_id,
user.id as u_id,
user.name as u_name
FROM POST INNER JOIN User on post.user_id = user.id');
$stmt->execute();
while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
print_r($row);
/* will output:
Array (
'p_id' => 'value'
'p_text' => 'value'
'p_user_id' => 'value'
'u_id' => 'value',
'u_name' => 'value'
)
So now you need to decide how to create your objects with the information returned
*/
}