Я работаю с Tree Behavior CakePHP 3.0 и получаю интересную проблему, когда пытаюсь удалить узлы. В команде есть два типа узлов - внутренние и внешние. Внутренние узлы - это команды в древовидной структуре под мной, у меня есть полный доступ; внешние узлы - это команды под мной, у которых есть свои собственные команды, которые они создали, и поэтому у меня нет разрешения на их изменение (у меня есть только разрешение на удаление всего владельца верхнего уровня, но не изменение реальной структуры их команды).CakePHP 3 Tree Behavior - числовое значение вне диапазона при сохранении, удалении или перемещении функций
Так скажем, у меня есть структура, как это:
x
/| \
* o o x o = internal
/ x = external
o * = node I'm trying to delete
/\
o x
У меня есть функция удаления, которую я написал для удаления узлов команды. Если я удалю узел со звездочкой, я ожидаю, что он удалит каждый узел под ним. Когда я ударяю внешний узел (x внизу), он должен вместо этого изменить parent_id на null, так как у меня нет разрешения удалять чужую внешнюю команду.
Моя логика является рекурсивной и в основном называет себя для каждого ребенка в соответствии с логикой, подобной этому:
if ($team->external === 1) {
$team->parent_id = null;
$this->save($team);
} else {
$this->delete($team);
}
Я не буду выписывать все функции для краткости, но эта функция продолжается, пока все узлы были удалены. К сожалению, я получаю эту ошибку, когда я пытаюсь запустить функцию:
"SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in '((`my_application`.`teams`.`lft` + 1182) * -(1))'"
Так это выглядит как вопрос с ЯПТ или rght значений (возможно), и я запутался, почему она становится умноженным на - 1 ... в любом случае, я не совсем уверен, что здесь происходит.
У меня такая же проблема, когда я запускаю другие функции, такие как команда перемещения. Если я хочу, чтобы переместить пользователя под другой узел, я мог бы сделать что-то подобное в мой контроллер:
$team->parent_id = $this->request->data['id']; // let's say it's '21'
$this->Teams->save($team);
Та же проблема, что здесь происходит, когда я получаю «числовое значение из диапазона» вопрос. Я запустил $ this-> recover(); на столе несколько раз, чтобы убедиться, что значения таблицы и rght таблицы верны, и проблема все еще возникает.
Есть ли у кого-нибудь идеи?
Perfect. Я внес изменения, и я опубликовал некоторые предлагаемые изменения в документации, чтобы другие пользователи не сталкивались с той же проблемой. –