PHP PDO fetchAll,PDO :: FETCH_CLASS和join

Sha*_*kan 3 php oop pdo

我在以下代码中遇到问题:

$query = 'SELECT user.id as id, pet.name as name FROM user 
          LEFT JOIN pet on pet.user_id = user.id
          WHERE user.id = 15';

$result = $pdo->query($query); 
Run Code Online (Sandbox Code Playgroud)

此代码将生成类似于此的内容:

***************
| id | name   |
***************
| 1  | Mikey  |
***************
| 1  | Stewie |
***************
| 1  | Jessy  |
***************
Run Code Online (Sandbox Code Playgroud)

现在,我想PDO::FETCH_CLASS用来获取一个对象.但是,至少对我来说,这种方法只能用简单的SELECT语句才能正常工作.当你有一个join语句时,它将获取一个类中的所有内容.换一种说法:

$user = $result->fetchAll(PDO::FETCH_CLASS, 'User');
echo $user->name; // this will print the pet name (which is weird)
Run Code Online (Sandbox Code Playgroud)

因此,我想要有类似的东西:

$pets = $user->pets; // an array holding Pet Objects 
foreach ($pets as $pet)
   echo $pet->name . "-"; 
Run Code Online (Sandbox Code Playgroud)

这将产生:

Mikey - Stewie - Jessy -
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Álv*_*lez 6

您不能依靠PDO为您完成这项工作.PDO无法知道数据集列的来源,显然无法确定要转储数据的位置.

最简单的答案是你必须编写自己的代码.将行作为数组获取并使用它填充类,因为它始终是完成的;-)

您描述的技术是ORM(对象关系映射).有一些第三方库实现它,例如DoctrinePropel.