sql >> Databáze >  >> RDS >> Mysql

PDO FETCH_CLASS se spojenými tabulkami

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
   */
}


  1. Parametrizovat název tabulky v .NET/SQL?

  2. Hostitel 'xxx.xx.xxx.xxx' se nemůže připojit k tomuto serveru MySQL

  3. Testování výkonu pomocí MySQLdump a MySQL Shell Utility

  4. pomocí sql union na stejné tabulce v cakephp find query