Pokud vím, neexistuje žádná podpora pro přímo v PDO. Obvykle, pokud potřebujete vytvořit komplexní objektový graf z výsledku dotazu, odpovídá za to ORM.
Pokud tuto funkci potřebujete, doporučuji použít Doctrine nebo Propel na rozdíl od toho, abyste něco napsali sami. Existují i jiné, které mohou být lehčí, ale nemám s nimi žádné zkušenosti.
UPRAVIT:
Myslím, že jsem možná špatně pochopil otázku, jak jsem si jistý ostatní. Myslím, že skutečnou otázkou bylo, jak získat přístup ke spojeným sloupcům, nikoli nutně, jak z nich vytvořit objekt.
V takovém případě jednoduše pomocí standardní metody arry fethc jako PDO::FETCH_ASSOC
, PDO::FETCH_NUMERIC
nebo PDO::FETCH_BOTH
vám poskytne všechny požadované sloupce.
Takže pokud to chcete převést na "objektový graf", musíte to udělat ručně, nikoli pomocí PDO::FETCH_CLASS
.
Například:
//$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
*/
}