Spec-Zone.ru › CakePHP 3.5

Дерево поведения

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

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

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

Cake\ORM\Behavior реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait
Extended by Cake\ORM\Behavior\TreeBehavior
Пространство имён: Cake\ORM\Behavior
Расположение: ORM/Behavior/TreeBehavior.php

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

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

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

  • _reflectionCache, _table _config, _configInitialized

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

  • _ensureFields() protected

    Убеждается, что предоставленная сущность содержит непустые значения для полей слева и справа

  • _getMax() protected
    Возвращает максимальное значение индекса в таблице.
  • _getNode() protected
    Возвращает единственный узел из дерева по его первичному ключу
  • _getPrimaryKey() protected
    Возвращает единственное строковое значение, представляющее первичный ключ присоединенной таблицы
  • _moveDown() protected
    Вспомогательная функция, используемая с фактическим кодом для moveDown
  • _moveUp() protected
    Вспомогательная функция, используемая с фактическим кодом для moveUp
  • _recoverTree() protected
    Рекурсивный метод, используемый для восстановления одного уровня дерева
  • _removeFromTree() protected
    Вспомогательная функция, содержащая фактический код для removeFromTree
  • _scope() protected

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

  • _setAsRoot() protected

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

  • _setChildrenLevel() protected
    Установить уровень для потомков.
  • _setParent() protected

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

  • _sync() protected

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

  • _unmarkInternalTree() protected

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

  • afterSave() public
    Слушатель после сохранения.
  • beforeDelete() public
    Также удаляет узлы в поддереве сущности, которую нужно удалить
  • beforeSave() public

    Слушатель перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле родителя включено в параметры для сохранения.

  • childCount() public
    Получить количество дочерних узлов.
  • findChildren() public
    Получить дочерние узлы текущей модели
  • findPath() public

    Пользовательский метод поиска, который может использоваться для возвращения списка узлов от корня до конкретного узла в дереве. Этот пользовательский поиск требует, чтобы ключ 'for' передавался в параметрах, содержащих идентификатор узла, чтобы получить его путь.

  • findTreeList() public

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

  • formatTreeList() public

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

  • getLevel() public
    Возвращает уровень глубины узла в дереве.
  • initialize() public
    Метод начальной загрузки конструктора.
  • moveDown() public
    Переупорядочивает узел без изменения родителя.
  • moveUp() public
    Переупорядочивает узел без изменения родителя.
  • recover() public

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

  • removeFromTree() public

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

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

_ensureFields()source protected

_ensureFields( Cake\Datasource\EntityInterface $entity )

Убеждается, что предоставленная сущность содержит непустые значения для полей слева и справа

Параметры

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

_getMax()source protected

_getMax( )

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

Возвращает

целое число

_getNode()source protected

_getNode( mixed $id )

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

Параметры

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

Возвращает

Cake\Datasource\EntityInterface

Исключения

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

_getPrimaryKey()source 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, если поле родителя включено в параметры, которые будут сохранены.

Параметры

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

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 из иерархии, определенной столбцом родителя.

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

Возвращает

массив

_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

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

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

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

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

Возвращает

массив

implementedMethods()source public

implementedMethods( )

implementedMethods

Предоставляет отображение алиас->имя_метода реализованных методов. Пример:

[
   '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
Значение для записи.
boolean|строка $merge необязательно false

Истинно для рекурсивного объединения, «поверхностное» для простого объединения, ложно для перезаписи, по умолчанию ложно.

Выбрасывает

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

Устаревшее

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

Параметры

строка|массив|null $key необязательно null
Ключ для получения/установки или весь массив конфигураций.
смешанный|null $value необязательно null
Значение для установки.
boolean $merge необязательно 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
Возвращаемое значение, когда ключ не существует.

Возвращает

смешанный
Значение конфигурации, которое считывается.

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
Значение для установки.
boolean $merge необязательно 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–2018 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.5/class-Cake.ORM.Behavior.TreeBehavior.html

Spec-Zone.ru

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