sql >> Base de Datos >  >> RDS >> Mysql

PDO FETCH_CLASS con tablas unidas

Hasta donde yo sé, no hay soporte para directamente en PDO. Por lo general, si necesita crear un gráfico de objeto complejo a partir del resultado de una consulta, eso es responsabilidad de un ORM.

Si necesita esta función, le recomiendo usar Doctrine o Propel en lugar de escribir algo usted mismo. También hay otros que pueden ser más livianos, pero no tengo experiencia con ellos.

EDITAR:

Creo que tal vez entendí mal la pregunta, ya que estoy seguro de que otros podrían hacerlo. Creo que la verdadera pregunta era cómo obtener acceso a las columnas unidas, no necesariamente cómo crear un objeto a partir de ellas.

En ese caso, simplemente use un método estándar de Arry Fethc como PDO::FETCH_ASSOC , PDO::FETCH_NUMERIC o PDO::FETCH_BOTH le dará todas las columnas que consultó.

Entonces, si desea convertir eso en un "gráfico de objetos", debe hacerlo manualmente, no usando PDO::FETCH_CLASS .

Por ejemplo:

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