Laravel Nestedset — дерево категорий, проблема с обновлением данных. Как исправить?

Для построения дерева категорий применяется пакет Kalnoy\Nestedset\NodeTrait. При установке пакета и миграций в таблице базы данных создаются ряд полей: parent_id, _lft и _rgt.

Все работает, однако возникли сложности, или некое недопонимание связанное с обновлением категорий.
При создании новой категории достаточно присвоить parent_id - данные id родительской категории, и категория создается с необходимым уровнем вложенности.

Однако, при обновлении данных получаю сообщение об ошибке,
5fe49c545331e222656000.jpeg

Согласно данного сообщения об ошибке, Nestedset – не может переместить узел сам в себя. Но в данном случае я просто пытаюсь сохранить обновленные данные.
Метод UPDATE ресурсного контролера:

public function update(Request $request, $id)
    {
        $category = Category::find($id);
        $data = $request->all();
	       //$data - внесение изменений в данные для последующего сохранения
        $category->update($data);
        return redirect()->route('categories.index')->with('success', 'Категория изменена');
    }


В документации решения проблемы не нашел. Прошу помощи сообщества в решении данной проблемы. Кто имеет опыт и работал с Kalnoy\Nestedset\NodeTrait, куда смотреть, что исправить?
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
@voland700 Автор вопроса
Проблема решена, опишу решение.
1. В моем случае была ошибка в логике. Пытался ID - редактируемой категории сохранить как parent_id, в результате получал сообщение Kalnoy\Nestedset\NodeTrait об ошибке, что категория не может быть вложена сама в себя. Ошибка возникла при копировании формы для создания категории в шаблон для редактирования данных.
2. Просто присвоить parent_id - данные id родительской категории, для построения Kalnoy\Nestedset\NodeTrait дерева вложенных категорий недостаточно. Для пересчета дерева, если новой категории напрямую присвоить parent_id, необходимо запустить метод:
$category::fixTree();
данный метод запускает перерасчет дерева на основе данных parent_id, заполняет в таблице значения полей _lft и _rgt, на основе которых строится дерево вложенности.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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