PDO将对象键值作为id获取并将id保留在对象中

时间:2018-02-28 15:17:23

标签: php pdo

我已经看了很多这个问题。我想得到一个我的对象数组,id应该是键值。我是使用PDO :: FETCH_UNIQUE完成的。

它几乎按我想要的方式工作。这里的问题是ID将从对象中删除,并仅显示为键值。但是我希望键值作为id值并保持附加到对象的id。

我自己尝试过这个

$getUsers->fetchAll(\PDO::FETCH_UNIQUE|\PDO::FETCH_CLASS, User\Basic::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为键值的新数组。

任何人?

2 个答案:

答案 0 :(得分:1)

只需选择你的字段两次,

SELECT id, table.* FROM table ...

答案 1 :(得分:1)

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删除了不必要的嵌套。