Как создать массив где ключ массива является ID комментария. PDO?

В общем пытаюсь я реализовать древовидные комментарии. Результатом работы моего кода должно получиться что ключ массива это ID моего комментария.

Сейчас вот так:

[0] => Array
                (
                    [id] => 1
                    [comment] => Привет
                    [create_at] => 0000-00-00 00:00:00
                    [parent_id] => 0
                    [login] => Admin
                )


А должно быть вот так:

>>> [1] => Array
                (
                 >>>   [id] => 1
                    [comment] => Привет
                    [create_at] => 0000-00-00 00:00:00
                    [parent_id] => 0
                    [login] => Admin
                )


Моя функция:
public static function getComments(){

        //Поключаюсь в базе данных
        $db = DB::getConnection();

        //выбираю все поля из таблицы комментариев
        $sql = 'SELECT * FROM comments';

        // подготовливаю запрос к выполнению
        $result = $db->prepare($sql);

        // выполняю
        $result->execute();

        //создаю массив где ключ массива является ID комментария
        $item = array();
        while($row = $result->fetchAll(PDO::PARAM_STR)){
            $item [$row['id']] = $row;

        }
        return $item ;

    }


Вот когда я добавляю сюда $item [] = $row; идентификатор $row['id'] но в итоге у меня ошибка:
Notice: Undefined index: id in C:\OpenServer\domains\MVC-2\engine\app\models\Comment.php on line 29

выходит так что скрипт пытается изменить то что я обвёл синим, а не то что мне нужно (обвёл красным)
5a1ab9796c3b0309922875.png

В статье по которой я это делаю не ПДО По этому сорян за тупость. Помогите =)
Статья: https://bezramok-tlt.ru/?mode=2&post=21
  • Вопрос задан
  • 719 просмотров
Решения вопроса 2
0xD34F
@0xD34F
А вы в курсе, что fetchAll возвращает массив? Вынесите fetchAll из цикла, или используйте fetch.

То есть, должно быть так:

$rows = $result->fetchAll();
foreach ($rows as $row) {

Или так:

while ($row = $result->fetch()) {
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
public static function getComments(){
    return DB::getConnection()->query('SELECT * FROM comments')->fetchAll(PDO::FETCH_UNIQUE);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы