Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PDO FETCH_CLASS com tabelas unidas


Não há suporte para o diretamente no PDO que eu saiba. Normalmente, se você precisar criar um gráfico de objeto complexo a partir do resultado da consulta, isso é responsabilidade de um ORM.

Se você precisar dessa funcionalidade, eu recomendo usar Doctrine ou Propel ao invés de escrever algo você mesmo. Existem outros também que podem ser mais leves, mas não tenho experiência com eles.

EDITAR:

Eu acho que talvez eu tenha entendido mal a pergunta, como tenho certeza que outros podem. Acho que a verdadeira questão era como obter acesso às colunas unidas, não necessariamente como criar um objeto a partir delas.

Nesse caso, basta usar um método padrão arry fethc como PDO::FETCH_ASSOC , PDO::FETCH_NUMERIC ou PDO::FETCH_BOTH lhe dará todas as colunas que você consultou.

Então, se você quiser transformar isso em um "grafo de objeto", você deve fazê-lo manualmente, não usando PDO::FETCH_CLASS .

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