Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 25.10.2016
Сообщений: 83

Создание нового элемента в объекте

19.03.2017, 19:03. Показов 2278. Ответов 4
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
PHP
1
2
3
4
5
6
7
8
9
10
foreach ($categories as $category)
        {
            $rsChildren = $this->entityManager->getRepository(Category::class)
                    ->ChildrenCategory($category->getId());       
            if($rsChildren){
                $category['children'] = $rsChildren;
            }
            $catChildren[] = $rsChildren;
 
        }
В $rsChildren возвращается объект класса entityManager, в общем это какая-то строка из таблицы в виде объекта.
А дальше мне нужно добавить элемент ['children'] к основному объекту, в который и будет добавляться результат запроса. Но интерпритатор ругается и говорит что нельзя использовать объект как массив. Как это можно исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2017, 19:03
Ответы с готовыми решениями:

Создание нового элемента
Здравствуйте! Создаю новый элемент справочника обработкой. Есть кусок кода для проверки на возможный дубль: Если...

Создание копии нового элемента!
Нужна помощь. Такая вот проблема, есть комбокс и есть лейбл. При нажатии на лейбл должен создаваться новый комбобокс с такими же...

Создание нового элемента jquery
Добрый день, ребята, помогите пожалуйста) не могу найти ошибку в коде. Задача такая: нужно в существующую форму ввести какие-либо данные и...

4
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 19:27
Цитата Сообщение от Tverdislav Посмотреть сообщение
PHP
1
$category['children'] = $rsChildren;
PHP
1
$category->children = $rsChildren;
1
1 / 1 / 1
Регистрация: 25.10.2016
Сообщений: 83
19.03.2017, 20:38  [ТС]
Kerry_Jr, я только начинаю изучать пхп, и уже несколько дней бьюсь над этой задачей, но стоило написать сюда и еще порыться в интернете и ответ нашелся. Но беда не приходит одна.
Во вьюху приходят с контроллера две переменные содержащие результаты запросов:
'categories' => $categories - содержит основные категории,
'catChildren' => $catChildren - содержит вспомогательные категории;
Между собой они связаны по id и parentId. Т.е. у основных категорий id = 1, 2, 3..., parentId = 0, у вспомогательных - id продолжается по автоинкременту, а parentId = id(основной категории)
Так вот во вьюхе такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php foreach($categories as $category){
        echo    "<tr>
                    <td>{$this->escapeHtml($category->getId())}</td>
                    <td>{$this->escapeHtml($category->getParentId())}</td>
                    <td>{$this->escapeHtml($category->getCategory())}</td>";
        echo        '<td><a class="btn btn-success" href="'.$this->url('admin/category', array('action' => 'edit', 'id' => $category->getId())).'"><span class="glyphicon glyphicon-pencil" ></span> Редактировать</a>&nbsp;&nbsp;
                         <a class="btn btn-danger" href="'.$this->url('admin/category', array('action' => 'delete', 'id' => $category->getId())).'" onclick="if(confirm(\'Удалить запись?\'))  {document.location = this.href;} return false;"><span class="glyphicon glyphicon-remove"></span> Удалить</a>
                    </td>
                </tr>';
            if ($category->children->getParentId() == $category->getId()){
                foreach($category as $item){
                echo    "<tr>
                            <td>{$this->escapeHtml($item->getId())}</td>
                            <td>{$this->escapeHtml($item->getParentId())}</td>
                            <td>{$this->escapeHtml($item->getCategory())}</td>";
                echo        '<td><a class="btn btn-success" href="'.$this->url('admin/category', array('action' => 'edit', 'id' => $item->getId())).'"><span class="glyphicon glyphicon-pencil" ></span> Редактировать</a>&nbsp;&nbsp;
                                 <a class="btn btn-danger" href="'.$this->url('admin/category', array('action' => 'delete', 'id' => $item->getId())).'" onclick="if(confirm(\'Удалить запись?\'))  {document.location = this.href;} return false;"><span class="glyphicon glyphicon-remove"></span> Удалить</a>
                            </td>
                        </tr>';
                }
            }
        }
        ?>
В операторе if интерпритатор говорит
Call to a member function getParentId() on array
как с этим бороться?

Добавлено через 21 минуту
На всякий случай код из контроллера:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function indexAction()
    {       
        $categories = $this->entityManager->getRepository(Category::class)
                    ->findAllMainCategory();            
        $catChildren = [];
    
        foreach ($categories as $category)
        {
            $rsChildren = $this->entityManager->getRepository(Category::class)
                    ->ChildrenCategory($category->getId());       
            if($rsChildren){
                $category->children = $rsChildren;
            }
            $catChildren[] = $rsChildren;
 
    }
 
        // Визуализируем шаблон представления.
        return new ViewModel([
            'categories' => $categories,
            'catChildren' => $catChildren,
        ]);
    }
и код запросов:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public function findAllMainCategory(){
        $entityManager = $this->getEntityManager();       
        $queryBuilder = $entityManager->createQueryBuilder();   
        $queryBuilder->select('c')
                ->from(Category::class, 'c')
                ->where('c.parentId = :parentId')
                ->setParameter('parentId', '0');
        $categories = $queryBuilder->getQuery()->getResult();
        return $categories;
    }
    
    public function ChildrenCategory($catId) {
        $entityManager = $this->getEntityManager();       
        $queryBuilder = $entityManager->createQueryBuilder();
        $queryBuilder->select('c')
                ->from(Category::class, 'c')
                ->where('c.parentId = :parentId')
                ->setParameter('parentId', $catId);
        $categories = $queryBuilder->getQuery()->getResult();     
        return $categories; 
    }
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
20.03.2017, 09:23
Цитата Сообщение от Tverdislav Посмотреть сообщение
Call to a member function getParentId() on array
Судя по тому, что здесь написано, вы пытаетесь вызвать метод getParentId() объекта у обычного массива. Опишите метод getParentId().
0
1 / 1 / 1
Регистрация: 25.10.2016
Сообщений: 83
20.03.2017, 16:14  [ТС]
Balanaar, c getParentId() с горе пополам разобрался, можете помочь с " вообще запутался.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php foreach($products as $product){
            echo    "<tr>
                        <td>{$this->escapeHtml($product->getId())}</td>
                        <td>{$this->escapeHtml($product->getName())}</td>
                        <td>{$this->escapeHtml($product->getPrice())}</td>
                        <td><select class='form-control'>"
                        foreach ($form as $element){
                        "<option value="{$this->escapeHtml($element->getId())}""
                                    if ($product->getCategoryId() == $element->getId())" selected="selected" >{$this->escapeHtml($element->getParentId())}</option>
                        }
                        </td>
                        <td>{$this->escapeHtml($product->getDescription())}</td>
                        <td>{$this->escapeHtml($product->getImage())}</td>";
            echo        '<td><a class="btn btn-success" href="'.$this->url('admin/products', array('action' => 'edit', 'id' => $product->getId())).'"><span class="glyphicon glyphicon-pencil" ></span> Редактировать</a>&nbsp;&nbsp;
                             <a class="btn btn-danger" href="'.$this->url('admin/products', array('action' => 'delete', 'id' => $product->getId())).'" onclick="if(confirm(\'Удалить запись?\'))  {document.location = this.href;} return false;"><span class="glyphicon glyphicon-remove"></span> Удалить</a>
                        </td>
                    </tr>';
        }
        ?>
И еще вопрос, по моему if и selected неправильно записаны, selected должно отрабатывать при выполнении if?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2017, 16:14
Помогаю со студенческими работами здесь

Создание нового элемента формы динамически
Всем доброго времени суток!! Есть такой код private void button1_Click(object sender, EventArgs e) { Form...

Создание нового элемента событием onclick
Добрый! В общем у меня есть элемент Div с кнопкой внизу. На при нажатии на кнопку (создается аналогичный Div с такой же кнопкой с теми же...

Создание и удаление нового элемента span
Нужно чтобы код яваскрипта создавал новый элемент спан присваивал ему какое-либо значние. А ещё чтобы при других условиях этот спан...

Создание нового элемента управления на форме динамически
а именно checkbox'a есть массив и почти пустая форма. на каждый элемент массива должен создать chekbox. кроме чекбоксов на форме...

Создание нового элемента форма Windows forms
Здравствуйте , у меня проблема связана с MVS 2008, при создании нового элемента формы Windows forms при построении вылазит ошибка ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru