gpt4 book ai didi

PHP PDO fetchAll、PDO::FETCH_CLASS 和连接

转载 作者:可可西里 更新时间:2023-11-01 00:35:48 25 4
gpt4 key购买 nike

我在下面的代码中遇到问题:

$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);

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

***************
| id | name |
***************
| 1 | Mikey |
***************
| 1 | Stewie |
***************
| 1 | Jessy |
***************

现在,我想使用 PDO::FETCH_CLASS 来获取一个对象。但是,至少对我来说,这种方法只适用于简单的 SELECT 语句。当您有连接语句时,它将获取单个类中的所有内容。换句话说:

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

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

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

这将产生:

Mikey - Stewie - Jessy -

我怎样才能做到这一点?

最佳答案

您不能依赖 PDO 来为您完成这项工作。 PDO 无法知道数据集列的来源,并且它显然无法确定您要将数据转储到何处。

最简单的答案是您必须编写自己的代码。获取行作为数组并用它填充你的类,因为它一直都是这样做的;-)

您描述的技术是 ORM ( Object-relational mapping )。有一些第三方库实现了它,例如 DoctrinePropel .

关于PHP PDO fetchAll、PDO::FETCH_CLASS 和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com