Spec-Zone.ru › CakePHP 3.8

Класс TreeBehavior

Делает таблицу, к которой он прикреплён, похожей на вложенный набор и предоставляет методы для управления и извлечения информации из полученной иерархической структуры.

Таблицы, к которым прикреплено это поведение, должны иметь столбец, ссылающийся на родительскую строку, и ещё два числовых столбца (lft и rght), где неявный порядок будет кэширован.

Для получения дополнительной информации о том, что такое вложенный набор и как он работает, обратитесь к https://www.sitepoint.com/hierarchical-data-database-2/

Cake\ORM\Behavior implements Cake\Event\EventListenerInterface uses Cake\Core\InstanceConfigTrait
Расширенный Cake\ORM\Behavior\TreeBehavior
Пространство имён: Cake\ORM\Behavior
Расположение: ORM/Behavior/TreeBehavior.php

Краткое описание свойств

  • $_defaultConfig protected
    array
    Значение по умолчанию конфигурации
  • $_primaryKey protected
    string
    Кэшированная копия первого столбца первичного ключа таблицы.

Унаследованные свойства

  • _reflectionCache, _table _config, _configInitialized

Краткое описание методов

  • _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()исходный код protected

_ensureFields( Cake\Datasource\EntityInterface $entity )

Убеждается, что предоставленный объект содержит непустые значения для полей left и right

Параметры

Cake\Datasource\EntityInterface $entity
Объект, для которого нужно убедиться в наличии полей

_getMax()исходный код protected

_getMax( )

Возвращает максимальное значение индекса в таблице.

Возвращает

целое число

_getNode()исходный код protected

_getNode( mixed $id )

Возвращает один узел из дерева по его первичному ключу

Параметры

смешанное $id
Идентификатор записи.

Возвращает

Cake\Datasource\EntityInterface

Исключения

Cake\Datasource\Exception\RecordNotFoundException
При отсутствии узла

_getPrimaryKey()исходный код protected

_getPrimaryKey( )

Возвращает строковое значение первичного ключа присоединённой таблицы

Возвращает

строка
END_OF_DOCUMENT_MARKER

_moveDown()source protected

_moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number )

Вспомогательная функция, используемая с фактическим кодом для перемещения вниз

Параметры

Cake\Datasource\EntityInterface $node
Узел для перемещения
integer|boolean $number
Количество позиций для перемещения узла, или true для перемещения в последнюю позицию

Возвращает

Cake\Datasource\EntityInterface|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\Datasource\EntityInterface|boolean
$node Узел после перемещения или false при ошибке

Исключения

Cake\Datasource\Exception\RecordNotFoundException
Когда узел не был найден

_recoverTree()source protected

_recoverTree( integer $counter = 0 , mixed $parentId = null , integer $level = -1 )

Рекурсивный метод, используемый для восстановления одного уровня дерева

Параметры

integer $counter необязательно 0
Значение последнего левого столбца, которое было назначено
mixed $parentId необязательно null
идентификатор родительского узла уровня, который необходимо восстановить
integer $level необязательно -1
Уровень узла

Возвращает

integer
Следующее значение для использования в левом столбце

_removeFromTree()source protected

_removeFromTree( Cake\Datasource\EntityInterface $node )

Вспомогательная функция, содержащая фактический код для removeFromTree

Параметры

Cake\Datasource\EntityInterface $node
Узел для удаления из дерева

Возвращает

Cake\Datasource\EntityInterface|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 $mark необязательно false

указывает, нужно ли отметить обновлённые значения, чтобы они не могли быть изменены последующими вызовами этой функции.

_unmarkInternalTree()source protected

_unmarkInternalTree( )

Вспомогательный метод, используемый для изменения знака левого и правого столбцов, которые меньше 0. Они были установлены отрицательными значениями ранее, чтобы их абсолютное значение не изменялось во время выполнения других преобразований дерева.

afterSave()source public

afterSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )

Обработчик после сохранения.

Управляет обновлением уровня потомков текущей сохранённой сущности.

Параметры

Cake\Event\Event $event
событие afterSave, которое было вызвано
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, если поле parent включено в параметры для сохранения.

Параметры

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 $direct необязательно 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
END_OF_DOCUMENT_MARKER

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\Query

formatTreeList()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
Сущность или первичный ключ, для которого необходимо получить уровень.

Возвращает

целое число|логическое значение
Целое значение уровня или false, если узел не существует.

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\Datasource\EntityInterface|логическое значение
Сущность после перемещения или 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\Datasource\EntityInterface|логическое значение
$node Узел после перемещения или false при неудаче

Исключения

Cake\Datasource\Exception\RecordNotFoundException
Когда узел не был найден

recover()source public

recover( )

Восстанавливает значения столбцов lft и right из иерархии, определенной столбцом parent.

removeFromTree()source public

removeFromTree( Cake\Datasource\EntityInterface $node )

Удаляет текущий узел из дерева, помещая его в качестве нового корня и перемещая всех дочерних элементов вверх на один уровень.

Обратите внимание, что узел не будет удален, а только перемещен из текущей позиции без перемещения его дочерних элементов.

Параметры

Cake\Datasource\EntityInterface $node
Узел для удаления из дерева

Возвращает

Cake\Datasource\EntityInterface|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

Возвращает

массив

Исключения

ReflectionException

_resolveMethodAliases()source protected

_resolveMethodAliases( string $key , array $defaults , array $config )

Удаляет алиасированные методы, которые в противном случае были бы дублированы пользовательской конфигурацией.

Параметры

строка $key
Ключ для фильтрации.
массив $defaults
Карта соответствия методов по умолчанию.
массив $config
Настроенная карта соответствия методов.

Возвращает

массив
Список данных конфигурации без дублирования.

getTable()source public

getTable( )

Получить экземпляр таблицы, к которой прикреплено это поведение.

Возвращает

Cake\ORM\Table
Экземпляр связанной таблицы.

implementedEvents()source public

implementedEvents( )

Получает обратные вызовы модели, к которым заинтересовано данное поведение.

Определяя один из методов обратного вызова, предполагается, что поведение заинтересовано в соответствующем событии.

Переопределите этот метод, если вам нужно добавить слушателей событий, отличных от стандартных. Или если вы хотите, чтобы ваше поведение слушало нестандартные события.

Возвращает

массив

Реализация

Cake\Event\EventListenerInterface::implementedEvents()

implementedFinders()source public

implementedFinders( )

implementedFinders

Предоставляет карту alias->methodname, которые реализует поведение. Пример:

[
   'this' => 'findThis',
   'alias' => 'findMethodName'
 ]

В приведенном выше примере вызов $Table->find('this') вызовет $Behavior->findThis(), а вызов $Table->find('alias') вызовет $Behavior->findMethodName()

Рекомендуется (но не обязательно) определять implementedFinders в свойстве config дочерних классов, чтобы не нужно было использовать рефлексию для вывода доступного списка методов. См. примеры основных поведений.

Возвращает

массив

Исключения

ReflectionException
END_OF_DOCUMENT_MARKER

implementedMethods()source public

implementedMethods( )

Реализованные методы

Предоставляет отображение alias->имя_метода, показывающее, какие методы реализует поведение. Пример:

[
   'method' => 'method',
   'aliasedmethod' => 'somethingElse'
 ]

В приведенном примере вызов $Table->method() вызовет $Behavior->method(), а вызов $Table->aliasedmethod() вызовет $Behavior->somethingElse()

Рекомендуется (но не обязательно) определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для получения списка доступных методов. Смотрите примеры в базовых поведенииях.

Возвращает

массив

Исключение

ReflectionException

verifyConfig()source public

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

True для рекурсивного слияния, 'shallow' для простого слияния, false для перезаписи, по умолчанию false.

Исключение

Cake\Core\Exception\Exception
если пытаетесь перезаписать существующую конфигурацию

config()source public deprecated

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']);

Устарело

3.4.0 используйте setConfig()/getConfig() вместо этого.

Параметры

строка|массив|null $key необязательно null
Ключ для получения/установки или полный массив конфигураций.
смешанное|null $value необязательно null
Значение для установки.
логическое $merge необязательно true
Рекурсивно сливать или перезаписывать существующую конфигурацию, по умолчанию true.

Возвращает

смешанное
Значение конфигурации, которое читается, или сам объект при операциях записи.

Исключение

Cake\Core\Exception\Exception
При попытке установить неверный ключ.

configShallow()source public

configShallow( string|array $key , mixed|null $value = null )

Объединяет предоставленную конфигурацию с существующей конфигурацией. В отличие от config(), которая выполняет рекурсивное слияние вложенных ключей, этот метод выполняет простое слияние.

Установка конкретного значения:

$this->configShallow('key', $value);

Установка вложенного значения:

$this->configShallow('some.nested.key', $value);

Обновление нескольких параметров конфигурации одновременно:

$this->configShallow(['one' => 'value', 'another' => 'value']);

Параметры

строка|массив $key
Ключ для установки, или полный массив конфигураций.
смешанное|null $value необязательно null
Значение для установки.

Возвращает


$this

getConfig()source public

getConfig( string|null $key = null , mixed $default = null )

Возвращает конфигурацию.

Использование

Чтение всей конфигурации:

$this->getConfig();

Чтение конкретного значения:

$this->getConfig('key');

Чтение вложенного значения:

$this->getConfig('some.nested.key');

Чтение со значением по умолчанию:

$this->getConfig('some-key', 'default-value');

Параметры

строка|null $key необязательно null
Ключ для получения или null для всей конфигурации.
смешанное $default необязательно null
Значение по умолчанию, если ключ не существует.

Возвращает

смешанное
Данные конфигурации по указанному ключу или null, если ключ не существует.

setConfig()source public

setConfig( string|array $key , mixed|null $value = null , boolean $merge = true )

Устанавливает конфигурацию.

Использование

Установка конкретного значения:

$this->setConfig('key', $value);

Установка вложенного значения:

$this->setConfig('some.nested.key', $value);

Обновление нескольких параметров конфигурации одновременно:

$this->setConfig(['one' => 'value', 'another' => 'value']);

Параметры

строка|массив $key
Ключ для установки или полный массив конфигураций.
смешанное|null $value необязательно null
Значение для установки.
логическое $merge необязательно true
Рекурсивно сливать или перезаписывать существующую конфигурацию, по умолчанию true.

Возвращает


$this

Исключение

Cake\Core\Exception\Exception
При попытке установить неверный ключ.

Подробное описание свойств

$_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,
]

$_primaryKeysource

protected строка

Кэшированная копия первого столбца первичного ключа таблицы.

© 2005–present 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.
https://api.cakephp.org/3.8/class-Cake.ORM.Behavior.TreeBehavior.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API