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