Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO FETCH_CLASS със съединени таблици

Доколкото знам, няма поддръжка за директно в PDO. Обикновено, ако трябва да създадете сложна обектна графика от резултата от заявката, това е отговорност на ORM.

Ако имате нужда от тази функционалност, препоръчвам да използвате Doctrine или Propel за разлика от това да напишете нещо сами. Има и други, които може да са по-леки, но нямам опит с тях.

РЕДАКТИРАНЕ:

Мисля, че може би съм разбрал погрешно въпроса, както съм сигурен, че другите биха могли. Мисля, че истинският въпрос беше как да получите достъп до обединените колони, а не непременно как да създадете обект от тях.

В този случай просто се използва стандартен метод arry fethc като PDO::FETCH_ASSOC , PDO::FETCH_NUMERIC или PDO::FETCH_BOTH ще ви даде всички колони, които сте заявили.

Така че, ако искате да го превърнете в "графика на обекта", трябва да го направите ръчно, а не чрез PDO::FETCH_CLASS .

Например:

//$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предаване на FieldName като параметър в MySQL Stored Procedure

  2. MySQL Group By с горен N номер от всеки вид

  3. Обединете таблици със стойности на запетая

  4. Извикване на съхранена процедура, когато името на процедурата е в променлива в mysql

  5. Достъп до XAMPP mysql чрез Python