PDO将对象键值作为id获取并将id保留在对象中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDO将对象键值作为id获取并将id保留在对象中相关的知识,希望对你有一定的参考价值。
我已经看了很多这个问题。我想得到一个我的对象数组,id应该是键值。我使用PDO :: FETCH_UNIQUE做到了这一点。
它几乎按照我想要的方式工作。这里的问题是ID将从对象中删除,并仅显示为键值。但我希望键值作为id值并保持附加到对象的id。
我自己试了一下
$getUsers->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_CLASS, UserBasic::class);
这确实返回了id,但id到处都是0。
概念:
{
id: 3,
name: 'pietje'
},
{
id: 4,
name: 'pietje'
}
然后我想要一个像这样的对象数组(我想我在这里犯了一个错误)
[3 => {
id: 3,
name: 'pietje'
},
4=> {
id: 4,
name: 'pietje'
}]
但就像我说的那样,对象中的id始终是我做的方式,我在互联网上找不到任何关于我想要它的方式。 Yhea肯定我可以循环每个用户并添加一个id,但是我可以循环遍历每个用户并创建一个以用户id为键值的新数组。
任何人?
答案
只需选择你的领域两次,
SELECT id, table.* FROM table ...
另一答案
PDO :: FETCH_GROUP将允许您对结果进行分组;由于您按ID进行分组并且应该是唯一的,因此您将根据需要获取所有行。编辑:
$sth = $pdo_dbh->prepare('SELECT id, name FROM users');
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$result = array_map('reset', $result);
将返回这样的数组。
Array
(
[2] => Array
(
[name] => Rob
)
[1] => Array
(
[name] => George
)
)
它有助于将ID列作为结果数组中的键移动,并且只在数组值中保留所需的列。我没注意到你希望将结果作为类对象获取。使用array_map删除了不必要的嵌套。
以上是关于PDO将对象键值作为id获取并将id保留在对象中的主要内容,如果未能解决你的问题,请参考以下文章
当没有其他引用保留对象时,如何将 id 对象安全地存储在 ARC 下的 C++ void* 成员中?