Класс TreeBehavior
Делает таблицу, к которой он прикреплен, похожей на вложенное множество и предоставляет методы для управления и извлечения информации из полученной иерархической структуры.
Таблицы, к которым прикреплено это поведение, должны иметь столбец, ссылающийся на родительскую строку, и еще два числовых столбца (lft и rght), где неявный порядок будет кэшироваться.
Для получения дополнительной информации о том, что такое вложенное множество и как оно работает, обратитесь к http://www.sitepoint.com/hierarchical-data-database-2/
- Cake\ORM\Behavior реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait
-
Cake\ORM\Behavior\TreeBehavior
Краткое описание свойств
-
$_defaultConfigprotectedКонфигурация по умолчаниюarray -
$_primaryKeyprotectedКэшированная копия первого столбца первичного ключа таблицы.string
Унаследованные свойства
Краткое описание методов
- _ensureFields() protected
Обеспечивает, что предоставленная сущность содержит непустые значения для полей left и right
- _getMax() protectedВозвращает максимальное значение индекса в таблице.
- _getNode() protectedВозвращает один узел из дерева по его первичному ключу
- _getPrimaryKey() protectedВозвращает строковое значение первичного ключа прикрепленной таблицы
- _moveDown() protectedВспомогательная функция, используемая с фактическим кодом для moveDown
- _moveUp() protectedВспомогательная функция, используемая с фактическим кодом для moveUp
- _recoverTree() protectedРекурсивный метод, используемый для восстановления одного уровня дерева
- _removeFromTree() protectedВспомогательная функция, содержащая фактический код для removeFromTree
- _scope() protected
Изменяет переданный запрос таким образом, чтобы он возвращал только ограниченные записи, как определено в конфигурации дерева.
- _setAsRoot() protected
Обновляет поля left и right для переданной сущности, чтобы ее можно было установить как новый корень в дереве. Также изменяет порядок в остальной части дерева, чтобы структура оставалась корректной
- _setChildrenLevel() protectedУстанавливает уровень для потомков.
- _setParent() protected
Устанавливает правильные значения left и right для переданной сущности, чтобы ее можно было обновить до нового родителя. Также создает пробел в дереве, чтобы перемещение узла можно было выполнить без нарушения структуры.
- _sync() protected
Вспомогательная функция, используемая для автоматического изменения значения как полей left, так и right на определенное количество, соответствующее переданным условиям.
- _unmarkInternalTree() protected
Вспомогательный метод, используемый для инвертирования знака полей left и right, которые меньше 0. Они были установлены в отрицательные значения ранее, чтобы их абсолютное значение не менялось при выполнении других преобразований дерева.
- afterSave() publicСлушатель после сохранения.
- beforeDelete() publicТакже удаляет узлы в поддереве удаляемой сущности
- beforeSave() public
Слушатель перед сохранением. Прозрачно управляет настройкой полей lft и rght, если поле parent включено в параметры, которые нужно сохранить.
- childCount() publicПолучить количество дочерних узлов.
- findChildren() publicПолучить дочерние узлы текущей модели
- findPath() public
Пользовательский метод поиска, который можно использовать для возвращения списка узлов от корня до конкретного узла в дереве. Этот пользовательский поиск требует, чтобы ключ 'for' был передан в параметрах, содержащих идентификатор узла, чтобы получить его путь.
- findTreeList() public
Получает представление элементов в дереве в виде плоского списка, где ключами являются первичные ключи таблицы, а значениями — поле отображения таблицы. Значения добавляются для визуального указания относительной глубины в дереве.
- formatTreeList() public
Форматирует запрос в виде плоского списка, где ключами являются первичные ключи таблицы, а значениями — поле отображения таблицы. Значения добавляются для визуального указания относительной глубины в дереве.
- getLevel() publicВозвращает уровень глубины узла в дереве.
- initialize() publicМетод подключения конструктора.
- moveDown() publicПереупорядочивает узел без изменения родителя.
- moveUp() publicПереупорядочивает узел без изменения родителя.
- recover() public
Восстанавливает значения столбцов lft и right из иерархии, определенной столбцом parent.
- removeFromTree() public
Удаляет текущий узел из дерева, поместив его в качестве нового корня и переместив всех детей на один уровень выше.
Подробное описание методов
_ensureFields()source protected
_ensureFields( Cake\Datasource\EntityInterface $entity )
Обеспечивает, что предоставленная сущность содержит непустые значения для полей left и right
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, для которой нужно убедиться в наличии полей
_getMax()source protected
_getMax( )
Возвращает максимальное значение индекса в таблице.
Возвращает
целое число_getNode()source protected
_getNode( mixed $id )
Возвращает один узел из дерева по его первичному ключу
Параметры
- смешанное
$id - Идентификатор записи.
Возвращает
Cake\ORM\EntityВыбрасывает
Cake\Datasource\Exception\RecordNotFoundExceptionЕсли узел не найден
_getPrimaryKey()source protected
_getPrimaryKey( )
Возвращает строковое значение первичного ключа прикрепленной таблицы
Возвращает
строка_moveDown()source protected
_moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number )
Вспомогательная функция, используемая с фактическим кодом для перемещения вниз.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно переместить
- integer|boolean
$number - Количество позиций для перемещения узла или true для перемещения в последнюю позицию
Возвращает
Cake\ORM\Entity|boolean$node Узел после перемещения или false при ошибке
Выбрасывает
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не найден
_moveUp()source protected
_moveUp( Cake\Datasource\EntityInterface $node , integer|boolean $number )
Вспомогательная функция, используемая с фактическим кодом для перемещения вверх.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно переместить
- integer|boolean
$number - Количество позиций для перемещения узла или true для перемещения в первую позицию
Возвращает
Cake\ORM\Entity|boolean$node Узел после перемещения или false при ошибке
Выбрасывает
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не найден
_recoverTree()source protected
_recoverTree( integer $counter 0 , mixed $parentId null , integer $level -1 )
Рекурсивный метод, используемый для восстановления одного уровня дерева.
Параметры
- integer
$counteroptional 0 - Значение последнего левого столбца, которое было назначено
- mixed
$parentIdoptional null - Идентификатор родителя уровня, который нужно восстановить
- integer
$leveloptional -1 - Уровень узла
Возвращает
integerСледующее значение для использования в левом столбце
_removeFromTree()source protected
_removeFromTree( Cake\Datasource\EntityInterface $node )
Вспомогательная функция, содержащая фактический код для removeFromTree.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно удалить из дерева
Возвращает
Cake\ORM\Entity|falseУзел после удаления из дерева или false при ошибке
_scope()source protected
_scope( Cake\ORM\Query $query )
Изменяет переданный запрос так, чтобы он возвращал только отфильтрованные записи, как определено в конфигурации дерева.
Параметры
-
Cake\ORM\Query$query - Запрос для изменения
Возвращает
Cake\ORM\Query_setAsRoot()source protected
_setAsRoot( Cake\Datasource\EntityInterface $entity )
Обновляет левые и правые столбцы для переданной сущности, чтобы ее можно было установить как новый корень в дереве. Также изменяет порядок в остальной части дерева, чтобы структура оставалась корректной.
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, которую нужно установить как новый корень
_setChildrenLevel()source protected
_setChildrenLevel( Cake\Datasource\EntityInterface $entity )
Устанавливает уровень для потомков.
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, потомки которой нужно обновить.
_setParent()source protected
_setParent( Cake\Datasource\EntityInterface $entity , mixed $parent )
Устанавливает правильные значения левого и правого столбцов для переданной сущности, чтобы ее можно было обновить до нового родителя. Также создает пробел в дереве, чтобы перемещение узла можно было выполнить без нарушения структуры.
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, которую нужно переместить к новому родителю
- mixed
$parent - Идентификатор родителя, который нужно установить
Выбрасывает
RuntimeExceptionЕсли родитель, которому нужно установить сущность, недействителен
_sync()source protected
_sync( integer $shift , string $dir , string $conditions , boolean $mark false )
Вспомогательная функция, используемая для автоматического изменения значения столбцов слева и справа на определенную величину, соответствующую переданным условиям.
Параметры
- integer
$shift - Значение для работы со столбцами слева и справа
- string
$dir - Оператор для смещения значения (+/-)
- string
$conditions SQL фрагмент, используемый для сравнения слева или справа с ним.
- boolean
$markoptional false Указывает, нужно ли помечать обновленные значения, чтобы они не могли быть изменены последующими вызовами этой функции.
_unmarkInternalTree()source protected
_unmarkInternalTree( )
Вспомогательный метод, используемый для изменения знака столбцов слева и справа, которые меньше 0. Они были установлены в отрицательные значения ранее, чтобы их абсолютные значения не менялись во время выполнения других преобразований дерева.
afterSave()source public
afterSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Обработчик после сохранения.
Управляет обновлением уровня потомков текущей сохраненной сущности.
Параметры
-
Cake\Event\Event$event - Событие beforeSave, которое было запущено
-
Cake\Datasource\EntityInterface$entity - Сущность, которая будет сохранена
beforeDelete()source public
beforeDelete( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Также удаляет узлы в поддереве сущности, которую нужно удалить.
Параметры
-
Cake\Event\Event$event - Событие beforeDelete, которое было запущено
-
Cake\Datasource\EntityInterface$entity - Сущность, которая будет сохранена
beforeSave()source public
beforeSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Обработчик перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле родителя включено в параметры, которые нужно сохранить.
Параметры
-
Cake\Event\Event$event - Событие beforeSave, которое было запущено
-
Cake\Datasource\EntityInterface$entity - Сущность, которая будет сохранена
Выбрасывает
RuntimeExceptionЕсли родитель, который нужно установить для узла, недействителен
childCount()source public
childCount( Cake\Datasource\EntityInterface $node , boolean $direct false )
Возвращает количество дочерних узлов.
Параметры
-
Cake\Datasource\EntityInterface$node - Сущность, для которой нужно посчитать дочерние узлы
- boolean
$directoptional false Указывает, нужно ли считать все узлы в поддереве или только непосредственные дочерние узлы
Возвращает
integerКоличество дочерних узлов.
findChildren()source public
findChildren( Cake\ORM\Query $query , array $options )
Возвращает дочерние узлы текущей модели.
Доступные параметры:
- for: Идентификатор записи для чтения.
- direct: Булево значение, указывает, нужно ли вернуть только непосредственные (true) или все (false) дочерние узлы, по умолчанию false (все дочерние узлы).
Если параметр direct установлен в true, возвращаются только непосредственные дочерние узлы (на основе поля parent_id).
Параметры
-
Cake\ORM\Query$query - Запрос.
- array
$options - Массив параметров, как описано выше
Возвращает
Cake\ORM\QueryВыбрасывает
InvalidArgumentExceptionКогда ключ 'for' не передан в $options
findPath()source public
findPath( Cake\ORM\Query $query , array $options )
Метод нахождения пути от корня к узлу в дереве. Этот пользовательский метод поиска требует, чтобы ключ 'for' был передан в опциях, содержащих идентификатор узла, для которого нужно получить путь.
Параметры
-
Cake\ORM\Query$query - Конструируемый запрос для изменения
- массив
$options - список параметров для запроса
Возвращает
Cake\ORM\QueryИсключения
InvalidArgumentExceptionЕсли ключ 'for' отсутствует в опциях
findTreeList()source public
findTreeList( Cake\ORM\Query $query , array $options )
Возвращает представление элементов дерева в виде плоского списка, где ключи — первичный ключ таблицы, а значения — поле отображения таблицы. Значения добавляются префиксы, визуально обозначающие относительную глубину в дереве.
Параметры
- keyPath: Путь, разделенный точкой, для извлечения поля, которое будет использоваться в качестве ключа массива, или замыкание для возвращения ключа из предоставленной строки.
- valuePath: Путь, разделенный точкой, для извлечения поля, которое будет использоваться в качестве значения массива, или замыкание для возвращения значения из предоставленной строки.
- spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента
Параметры
-
Cake\ORM\Query$query - Запрос.
- массив
$options - Массив параметров, как описано выше.
Возвращает
Cake\ORM\QueryformatTreeList()source public
formatTreeList( Cake\ORM\Query $query , array $options [] )
Форматирует запрос в виде плоского списка, где ключи — первичный ключ таблицы, а значения — поле отображения таблицы. Значения добавляются префиксы, визуально обозначающие относительную глубину в дереве.
Параметры
- keyPath: Путь, разделенный точкой, к полю, которое будет ключом результирующего массива, или замыкание для возвращения ключа из предоставленной строки.
- valuePath: Путь, разделенный точкой, к полю, являющемуся значением массива, или замыкание для возвращения значения из предоставленной строки.
- spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента.
Параметры
-
Cake\ORM\Query$query - Объект запроса для форматирования.
- массив
$optionsнеобязательно [] - Массив параметров, как описано выше.
Возвращает
Cake\ORM\QueryУсиленный запрос.
getLevel()source public
getLevel( integer|string|Cake\Datasource\EntityInterface $entity )
Возвращает уровень глубины узла в дереве.
Параметры
- целое число|строка|
Cake\Datasource\EntityInterface$entity - Сущность или первичный ключ, для которого нужно получить уровень.
Возвращает
целое число|логическое значениеЦелое число уровня или ложь, если узел не существует.
initialize()source public
initialize( array $config )
Метод обработки конструктора.
Параметры
- массив
$config - Настройки конфигурации, предоставленные этому поведению.
Переопределяет
Cake\ORM\Behavior::initialize() moveDown()source public
moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )
Переупорядочивает узел без изменения родителя.
Если узел является последним дочерним элементом или является узлом верхнего уровня без последующего узла, этот метод вернет false
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для перемещения
- целое число|логическое значение
$numberнеобязательно 1 - Сколько позиций переместить узел или true, чтобы переместить в последнюю позицию
Возвращает
Cake\ORM\Entity|логическое значениесущность после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не был найден
moveUp()source public
moveUp( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )
Переупорядочивает узел без изменения родителя.
Если узел является первым дочерним элементом или является узлом верхнего уровня без предыдущего узла, этот метод вернет false
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для перемещения
- целое число|логическое значение
$numberнеобязательно 1 - Сколько позиций переместить узел или true, чтобы переместить в первую позицию
Возвращает
Cake\ORM\Entity|логическое значение$node Узел после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не был найден
recover()source public
recover( )
Восстанавливает значения столбцов lft и right из иерархии, определенной столбцом родителя.
removeFromTree()source public
removeFromTree( Cake\Datasource\EntityInterface $node )
Удаляет текущий узел из дерева, помещая его как новый корень и перемещая всех дочерних элементов на один уровень вверх.
Обратите внимание, что узел не будет удален, а только перемещен из его текущего положения без перемещения его дочерних элементов с ним.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для удаления из дерева
Возвращает
Cake\ORM\Entity|falseУзел после удаления из дерева или false при ошибке
Методы, унаследованные от Cake\ORM\Behavior
__construct()source public
__construct( Cake\ORM\Table $table , array $config [] )
Конструктор
Объединяет конфигурацию со значениями по умолчанию и сохраняет в свойстве config.
Параметры
-
Cake\ORM\Table$table - Таблица, к которой прикреплено это поведение.
- массив
$configнеобязательно [] - Настройки конфигурации для этого поведения.
_reflectionCache()source protected
_reflectionCache( )
Получение методов, реализованных этим поведением
Использует метод implementedEvents() для исключения методов обратного вызова. Методы, начинающиеся с _ будут игнорироваться, как и методы, объявленные в Cake\ORM\Behavior
Возвращает
массив_resolveMethodAliases()source protected
_resolveMethodAliases( string $key , array $defaults , array $config )
Удаляет алиасы методов, которые в противном случае будут дублироваться пользовательской конфигурацией.
Параметры
- строка
$key - Ключ для фильтрации.
- массив
$defaults - Карта соответствий методов по умолчанию.
- массив
$config - Настройка соответствий методов.
Возвращает
массивСписок данных конфигурации без дублирования.
implementedEvents()source public
implementedEvents( )
Получение обратных вызовов модели, которыми интересуется это поведение.
Определяя один из методов обратного вызова, предполагается, что поведение интересуется соответствующим событием.
Переопределите этот метод, если вам нужно добавить слушателей событий, отличных от стандартных. Или если вы хотите, чтобы ваше поведение реагировало на нестандартные события.
Возвращает
массивРеализация
Cake\Event\EventListenerInterface::implementedEvents() implementedFinders()source public
implementedFinders( )
implementedFinders
Предоставляет отображение алиас->имя_метода реализованных методов поиска. Пример:
[ 'this' => 'findThis', 'alias' => 'findMethodName' ]
С указанным примером, вызов $Table->find('this') вызовет $Behavior->findThis(), а вызов $Table->find('alias') вызовет $Behavior->findMethodName()
Рекомендуется, но не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для получения списка доступных методов. Смотрите примеры в базовых классах поведения.
Возвращает
массивimplementedMethods()source public
implementedMethods( )
implementedMethods
Предоставляет отображение alias->имя_метода для методов, реализуемых поведением. Пример:
[ 'method' => 'method', 'aliasedmethod' => 'somethingElse' ]
В приведенном выше примере вызов $Table->method() вызовет $Behavior->method(), а вызов $Table->aliasedmethod() вызовет $Behavior->somethingElse().
Рекомендуется, хотя и не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для получения списка доступных методов. См. примеры в базовых поведениих.
Возвращает
массивverifyConfig()source public
verifyConfig( )
verifyConfig
Проверяет, что реализованные ключи содержат значения, указывающие на вызываемый элемент.
Выбрасывает
Cake\Core\Exception\Exceptionесли конфигурация неверна
Методы, используемые из Cake\Core\InstanceConfigTrait
_configDelete()source protected
_configDelete( string $key )
Удаляет один ключ конфигурации
Параметры
- строка
$key - Ключ для удаления.
Выбрасывает
Cake\Core\Exception\Exceptionесли пытаетесь перезаписать существующую конфигурацию
_configRead()source protected
_configRead( string|null $key )
Считывает переменную конфигурации
Параметры
- строка|null
$key - Ключ для чтения.
Возвращает
смешанный тип_configWrite()source protected
_configWrite( string|array $key , mixed $value , boolean|string $merge false )
Записывает переменную конфигурации
Параметры
- строка|массив
$key - Ключ для записи.
- смешанный тип
$value - Значение для записи.
- логическое значение|строка
$mergeнеобязательный false Истинно для рекурсивного слияния, 'shallow' для простого слияния, ложно для перезаписи, по умолчанию ложно.
Выбрасывает
Cake\Core\Exception\Exceptionесли пытаетесь перезаписать существующую конфигурацию
config()source public
config( string|array|null $key null , mixed|null $value null , boolean $merge true )
Использование
Чтение всей конфигурации:
$this->config();
Чтение определенного значения:
$this->config('key'); Чтение вложенного значения:
$this->config('some.nested.key'); Установка определенного значения:
$this->config('key', $value); Установка вложенного значения:
$this->config('some.nested.key', $value); Обновление нескольких настроек конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Параметры
- строка|массив|null
$keyнеобязательный null - Ключ для получения/установки или полный массив конфигураций.
- смешанный тип|null
$valueнеобязательный null - Значение для установки.
- логическое значение
$mergeнеобязательный true - Выполнять ли рекурсивное слияние или перезаписывать существующую конфигурацию, по умолчанию истинно.
Возвращает
смешанный типЗначение конфигурации, которое считывается, или сам объект при операциях записи.
Выбрасывает
Cake\Core\Exception\ExceptionПри попытке установить недопустимый ключ.
configShallow()source public
configShallow( string|array $key , mixed|null $value null )
Объединить предоставленную конфигурацию с существующей конфигурацией. В отличие от config(), которая выполняет рекурсивное слияние для вложенных ключей, этот метод выполняет простое слияние.
Установка определенного значения:
$this->config('key', $value); Установка вложенного значения:
$this->config('some.nested.key', $value); Обновление нескольких настроек конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Параметры
- строка|массив
$key - Ключ для установки или полный массив конфигураций.
- смешанный тип|null
$valueнеобязательный null - Значение для установки.
Возвращает
$this Объект самого себя.
Подробности свойств
$_defaultConfigsource
protected массив
Значения конфигурации по умолчанию
Они объединяются с пользовательской конфигурацией при использовании поведения.
[
'implementedFinders' => [
'path' => 'findPath',
'children' => 'findChildren',
'treeList' => 'findTreeList'
],
'implementedMethods' => [
'childCount' => 'childCount',
'moveUp' => 'moveUp',
'moveDown' => 'moveDown',
'recover' => 'recover',
'removeFromTree' => 'removeFromTree',
'getLevel' => 'getLevel',
'formatTreeList' => 'formatTreeList'
],
'parent' => 'parent_id',
'left' => 'lft',
'right' => 'rght',
'scope' => null,
'level' => null,
'recoverOrder' => null
]
© 2005–2016 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
http://api.cakephp.org/3.2/class-Cake.ORM.Behavior.TreeBehavior.html