Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDO FETCH_CLASS với các bảng đã tham gia

Theo như tôi biết thì không có hỗ trợ nào cho trực tiếp trong PDO. Thông thường, nếu bạn cần tạo một biểu đồ đối tượng phức tạp từ kết quả của truy vấn chịu trách nhiệm của ORM.

Nếu bạn cần chức năng này, tôi khuyên bạn nên sử dụng Doctrine hoặc Propel trái ngược với việc tự viết một cái gì đó. Có những loại khác cũng có thể nhẹ hơn, nhưng tôi không có kinh nghiệm về chúng.

CHỈNH SỬA:

Tôi nghĩ có lẽ tôi đã hiểu sai câu hỏi như tôi chắc chắn những người khác có thể. Tôi nghĩ câu hỏi thực sự là làm thế nào để có quyền truy cập vào các cột được kết hợp, chứ không phải là làm thế nào để tạo một đối tượng từ chúng.

Trong trường hợp đó, chỉ cần sử dụng một phương thức arry fethc tiêu chuẩn như PDO::FETCH_ASSOC , PDO::FETCH_NUMERIC hoặc PDO::FETCH_BOTH sẽ cung cấp cho bạn tất cả các cột mà bạn đã truy vấn.

Vì vậy, nếu bạn muốn biến điều đó thành "biểu đồ đối tượng", bạn phải làm điều đó theo cách thủ công chứ không phải bằng cách sử dụng PDO::FETCH_CLASS .

Ví dụ:

//$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. Buộc tải lại / làm mới khi nhấn nút quay lại

  2. Cập nhật thứ hạng trong Bảng MySQL

  3. MySQL:Giới hạn số lượng kết quả nhận được dựa trên giá trị cột | Kết hợp các truy vấn

  4. Giới thiệu về các kiểu dữ liệu SQL

  5. MySQL:Cách chọn hàng loạt các hàng với nhiều cặp trong mệnh đề WHERE