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保留在对象中的主要内容,如果未能解决你的问题,请参考以下文章

基本 Apex 对象 ID

当没有其他引用保留对象时,如何将 id 对象安全地存储在 ARC 下的 C++ void* 成员中?

如何将sql结果作为对象获取

SwiftyJson 追加 json 对象作为键值

如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

js对象替换键值名称