@Tokenchik

Почему может ломаться дерево Nested Sets?

Всем привет
В проект на yii2 подключен https://github.com/creocoder/yii2-nested-sets для таблицы users, на сайте реализована реферальная программа. Помимо основных полей lft, rgt, depth и tree добавлено поле parent_id. При привязке или обновления юзеров выполняется метод prepandTo() для перемещения юзера под другого пользователя.

Так вот возникла проблема, что иногда возникаю ситуации, когда lft у какой-то сущности становится больше, чем rgt.
Есть подозрения что такое возникает после сохранения сущностей юзеров в админке, где обновляются все поля в базе и если изменен родитель то prepandTo делается для старой записи, но воспроизвести так и не получилось. После этой ошибки дерево пользователей частично ломается

Сталкивался ли кто-нибудь с подобным?
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
asakasinsky
@asakasinsky
Предположу, что ломается при одновременном добавлении пользователей.
Получение древообразной структуры в Nested sets реализуется одним запросом, но изменение требует провести несколько операций. Теоретически, при определённой ситуации, может возникнуть одновременный пересчёт разных узлов.

Попробуйте использовать транзакции для решения проблемы.
Ответ написан
Ваш ответ на вопрос

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

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