Spec-Zone.ru › CakePHP 4.2

Class TreeBehavior

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

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

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

Пространство имён: Cake\ORM\Behavior

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

  • $_config protected
    array

    Конфигурация во время выполнения

  • $_configInitialized protected
    bool

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

  • $_defaultConfig protected
    array

    Конфигурация по умолчанию

  • $_primaryKey protected
    string

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

  • $_reflectionCache protected static
    array

    Кэш отражающего метода для поведений.

  • $_table protected
    Cake\ORM\Table

    Экземпляр таблицы.

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

  • __construct() public

    Конструктор

  • _configDelete() protected

    Удаляет один ключ конфигурации.

  • _configRead() protected

    Считывает ключ конфигурации.

  • _configWrite() protected

    Записывает ключ конфигурации.

  • _ensureFields() protected

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

  • _getMax() protected

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

  • _getNode() protected

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

  • _getPrimaryKey() protected

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

  • _moveDown() protected

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

  • _moveUp() protected

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

  • _recoverTree() protected

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

  • _reflectionCache() protected

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

  • _removeFromTree() protected

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

  • _resolveMethodAliases() protected

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

  • _scope() protected

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

  • _setAsRoot() protected

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

  • _setChildrenLevel() protected

    Устанавливает уровень для потомков.

  • _setParent() protected

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

  • _sync() protected

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

  • _unmarkInternalTree() protected

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

  • afterSave() public

    Слушатель после сохранения.

  • beforeDelete() public

    Также удаляет узлы в поддереве сущности, подлежащей удалению

  • beforeSave() public

    Обработчик перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле родителя включено в параметры, подлежащие сохранению.

  • childCount() public

    Получить количество дочерних узлов.

  • configShallow() public

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

  • findChildren() public

    Получить дочерние узлы текущей модели

  • findPath() public

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

  • findTreeList() public

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

  • formatTreeList() public

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

  • getConfig() public

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

  • getConfigOrFail() public

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

  • getLevel() public

    Возвращает уровень вложенности узла в дереве.

  • getTable() public deprecated

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

  • implementedEvents() public

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

  • implementedFinders() public

    implementedFinders

  • implementedMethods() public

    implementedMethods

  • initialize() public

    Метод инициализации конструктора.

  • moveDown() public

    Изменяет порядок узла без изменения родителя.

  • moveUp() public

    Изменяет порядок узла без изменения родительского элемента.

  • recover() public

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

  • removeFromTree() public

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

  • setConfig() public

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

  • table() public

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

  • verifyConfig() public

    verifyConfig

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

__construct() public

__construct(Cake\ORM\Table $table, array $config = [])

Конструктор

Объединяет конфигурацию с настройками по умолчанию и сохраняет в свойстве config.

Параметры

Cake\ORM\Table $table

Таблица, к которой прикреплено данное поведение.

array $config необязательно

Настройка для данного поведения.

_configDelete() protected

_configDelete(string $key): void

Удаляет один ключ конфигурации.

Параметры

string $key

Ключ для удаления.

Возвращает

void

Исключения

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

_configRead() protected

_configRead(string|null $key): mixed

Читает ключ конфигурации.

Параметры

string|null $key

Ключ для чтения.

Возвращает

mixed

_configWrite() protected

_configWrite(string|array $key, mixed $value, bool|string $merge = false): void

Записывает ключ конфигурации.

Параметры

string|array $key

Ключ, в который нужно записать.

mixed $value

Значение для записи.

bool|string $merge необязательно

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

Возвращает

void

Исключения

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

_ensureFields() protected

_ensureFields(Cake\Datasource\EntityInterface $entity): void

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

Параметры

Cake\Datasource\EntityInterface $entity

Объект, для которого нужно обеспечить поля

Возвращает

void

_getMax() protected

_getMax(): int

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

Возвращает

int

_getNode() protected

_getNode(mixed $id): Cake\Datasource\EntityInterface

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

Параметры

mixed $id

Идентификатор записи.

Возвращает

Cake\Datasource\EntityInterface

Выбрасывает

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

_getPrimaryKey() protected

_getPrimaryKey(): string

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

Возвращает

string

_moveDown() protected

_moveDown(Cake\Datasource\EntityInterface $node, int|true $number): Cake\Datasource\EntityInterface

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

Параметры

Cake\Datasource\EntityInterface $node

Узел, который нужно переместить

int|true $number

Количество позиций для перемещения узла или true для перемещения в последнюю позицию

Возвращает

Cake\Datasource\EntityInterface

Выбрасывает

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

_moveUp() защищённый

_moveUp(Cake\Datasource\EntityInterface $node, int|true $number): Cake\Datasource\EntityInterface

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

Параметры

Cake\Datasource\EntityInterface $node

Узел для перемещения

int|true $number

Количество позиций для перемещения узла или true для перемещения в первую позицию

Возвращает

Cake\Datasource\EntityInterface

Выбрасывает

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

_recoverTree() защищённый

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

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

Параметры

int $counter необязательный

Последнее значение левого столбца, которое было присвоено

mixed $parentId необязательный

идентификатор родителя уровня, который необходимо восстановить

int $level необязательный

Уровень узла

Возвращает

int

_reflectionCache() защищённый

_reflectionCache(): array

Получает методы, реализованные этим поведением

Использует метод implementedEvents() для исключения методов обратного вызова. Методы, начинающиеся с _ будут проигнорированы, как и методы, объявленные в Cake\ORM\Behavior

Возвращает

array

Выбрасывает

ReflectionException

_removeFromTree() защищённый

_removeFromTree(Cake\Datasource\EntityInterface $node): Cake\Datasource\EntityInterface|false

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

Параметры

Cake\Datasource\EntityInterface $node

Узел для удаления из дерева

Возвращает

Cake\Datasource\EntityInterface|false

_resolveMethodAliases() protected

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

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

Параметры

string $key

Ключ для фильтрации.

array $defaults

Отображение по умолчанию для методов.

array $config

Настроенные отображения для методов.

Возвращает

array

_scope() protected

_scope(Cake\ORM\Query $query): Cake\ORM\Query

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

Параметры

Cake\ORM\Query $query

Запрос для изменения

Возвращает

Cake\ORM\Query

_setAsRoot() protected

_setAsRoot(Cake\Datasource\EntityInterface $entity): void

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

Параметры

Cake\Datasource\EntityInterface $entity

Объект, который нужно установить в качестве нового корня

Возвращает

void

_setChildrenLevel() protected

_setChildrenLevel(Cake\Datasource\EntityInterface $entity): void

Устанавливает уровень для потомков.

Параметры

Cake\Datasource\EntityInterface $entity

Объект, потомки которого нужно обновить.

Возвращает

void

_setParent() protected

_setParent(Cake\Datasource\EntityInterface $entity, mixed $parent): void

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

Параметры

Cake\Datasource\EntityInterface $entity

Объект, который нужно переместить к новому родителю

mixed $parent

идентификатор родительского объекта

Возвращает

void

Исключения

RuntimeException
если родительский объект для переданного объекта некорректен

_sync() protected

_sync(int $shift, string $dir, string $conditions, bool $mark = false): void

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

Параметры

int $shift

значение, используемое для изменения столбцов left и right

string $dir

Оператор для изменения значения (+/-)

string $conditions

SQL-фрагмент, используемый для сравнения left или right с ним.

bool $mark необязательно

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

Возвращает

void

_unmarkInternalTree() protected

_unmarkInternalTree(): void

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

Возвращает

void

afterSave() public

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

Слушатель после сохранения.

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

Параметры

Cake\Event\EventInterface $event

Событие afterSave, которое было запущено

Cake\Datasource\EntityInterface $entity

сущность, которая будет сохранена

Возвращает

void

beforeDelete() public

beforeDelete(Cake\Event\EventInterface $event, Cake\Datasource\EntityInterface $entity): void

Также удаляет узлы в поддереве сущности, подлежащей удалению

Параметры

Cake\Event\EventInterface $event

Событие beforeDelete, которое было запущено

Cake\Datasource\EntityInterface $entity

Сущность, которая будет сохранена

Возвращает

void

beforeSave() public

beforeSave(Cake\Event\EventInterface $event, Cake\Datasource\EntityInterface $entity): void

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

Параметры

Cake\Event\EventInterface $event

Событие beforeSave, которое было запущено

Cake\Datasource\EntityInterface $entity

сущность, которая будет сохранена

Возвращает

void

Исключения

RuntimeException
если родитель для установки узла недействителен

childCount() public

childCount(Cake\Datasource\EntityInterface $node, bool $direct = false): int

Получить количество дочерних узлов.

Параметры

Cake\Datasource\EntityInterface $node

Сущность, для которой нужно посчитать потомков

bool $direct optional

Нужно ли считать все узлы в поддереве или только непосредственных потомков

Возвращает

int

configShallow() public

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

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

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

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

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

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

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

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

Параметры

string|array $key

Ключ для установки или полный массив конфигураций.

mixed|null $value optional

Значение для установки.

Возвращает

$this

findChildren() public

findChildren(Cake\ORM\Query $query, array $options): Cake\ORM\Query

Получить дочерние узлы текущей модели

Доступные параметры:

  • for: Идентификатор записи для чтения.
  • direct: Булево значение, указывает, возвращать только прямых (true) или все (false) потомков, по умолчанию false (все потомки).

Если параметр direct установлен в true, возвращаются только непосредственные потомки (на основе поля parent_id)

Параметры

Cake\ORM\Query $query

Запрос.

array $options

Массив параметров, как описано выше

Возвращает

Cake\ORM\Query

Выбрасывает

InvalidArgumentException
Если ключ 'for' не передан в $options

findPath() public

findPath(Cake\ORM\Query $query, array $options): Cake\ORM\Query

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

Параметры

Cake\ORM\Query $query

Построенный запрос для изменения

array $options

Список параметров для запроса

Возвращает

Cake\ORM\Query

Выбрасывает

InvalidArgumentException
Если ключ 'for' отсутствует в параметрах

findTreeList() public

findTreeList(Cake\ORM\Query $query, array $options): Cake\ORM\Query

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

Параметры

  • keyPath: Путь через точки к полю, которое будет использоваться в качестве ключа массива, или замыкание для возврата ключа из предоставленной строки.
  • valuePath: Путь через точки к полю, которое будет использоваться в качестве значения массива, или замыкание для возврата значения из предоставленной строки.
  • spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента.

Параметры

Cake\ORM\Query $query

Запрос.

array $options

Массив параметров, как описано выше.

Возвращаемое значение

Cake\ORM\Query

formatTreeList() public

formatTreeList(Cake\ORM\Query $query, array $options = []): Cake\ORM\Query

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

Параметры

  • keyPath: Путь через точки к полю, которое будет использоваться в качестве ключа результата массива, или замыкание для возврата ключа из предоставленной строки.
  • valuePath: Путь через точки к полю, которое будет использоваться в качестве значения массива, или замыкание для возврата значения из предоставленной строки.
  • spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента.

Параметры

Cake\ORM\Query $query

Объект запроса для форматирования.

array $options optional

Массив параметров, как описано выше.

Возвращаемое значение

Cake\ORM\Query

getConfig() public

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

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

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

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

$this->getConfig();

Чтение определенного значения:

$this->getConfig('key');

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

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

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

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

Параметры

string|null $key необязательный

Ключ для получения или null для всей конфигурации.

mixed $default необязательный

Возвращаемое значение, если ключ не существует.

Возвращает

mixed

getConfigOrFail() public

getConfigOrFail(string $key): mixed

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

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

Параметры

string $key

Ключ для получения.

Возвращает

mixed

Исключения

InvalidArgumentException

getLevel() public

getLevel(int|stringCake\Datasource\EntityInterface $entity): int|false

Возвращает уровень вложенности узла в дереве.

Параметры

int|stringCake\Datasource\EntityInterface $entity

Сущность или первичный ключ, для которого нужно получить уровень.

Возвращает

int|false

getTable() public

getTable(): Cake\ORM\Table

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

Возвращает

Cake\ORM\Table

implementedEvents() public

implementedEvents(): array

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

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

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

Возвращает

array

implementedFinders() public

implementedFinders(): array

implementedFinders

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

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

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

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

Возвращает

array

Выбрасывает

ReflectionException

implementedMethods() public

implementedMethods(): array

implementedMethods

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

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

В приведенном выше примере вызов $table->method() вызовет $behavior->method(), а вызов $table->aliasedMethod() вызовет $behavior->somethingElse()

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

Возвращает

array

Выбрасывает

ReflectionException

initialize() public

initialize(array $config): void

Метод-обработчик конструктора.

Реализуйте этот метод, чтобы избежать необходимости перезаписывать конструктор и вызывать родительский.

Параметры

array $config

Возвращает

void

moveDown() public

moveDown(Cake\Datasource\EntityInterface $node, int|true $number = 1): Cake\Datasource\EntityInterface|false

Переупорядочивает узел без изменения родителя.

Если узел является последним дочерним элементом или является узлом верхнего уровня без последующего узла, этот метод вернёт false.

Параметры

Cake\Datasource\EntityInterface $node

Узел для перемещения

int|true $number optional

Количество позиций для перемещения узла или true для перемещения в последнюю позицию

Возвращает

Cake\Datasource\EntityInterface|false

Исключение

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

moveUp() public

moveUp(Cake\Datasource\EntityInterface $node, int|true $number = 1): Cake\Datasource\EntityInterface|false

Переупорядочивает узел без изменения его родителя.

Если узел является первым дочерним элементом или является узлом верхнего уровня без предыдущего узла, этот метод вернёт false.

Параметры

Cake\Datasource\EntityInterface $node

Узел для перемещения

int|true $number optional

Количество позиций для перемещения узла или true для перемещения в первую позицию

Возвращает

Cake\Datasource\EntityInterface|false

Исключение

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

recover() public

recover(): void

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

Возвращает

void

removeFromTree() public

removeFromTree(Cake\Datasource\EntityInterface $node): Cake\Datasource\EntityInterface|false

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

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

Параметры

Cake\Datasource\EntityInterface $node

Узел для удаления из дерева

Возвращает

Cake\Datasource\EntityInterface|false

setConfig() public

setConfig(string|array $key, mixed|null $value = null, bool $merge = true): $this

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

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

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

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

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

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

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

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

Параметры

string|array $key

Ключ для установки или полный массив конфигураций.

mixed|null $value optional

Значение для установки.

bool $merge optional

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

Возвращает

$this

Выбрасывает

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

table() public

table(): Cake\ORM\Table

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

Возвращает

Cake\ORM\Table

verifyConfig() public

verifyConfig(): void

verifyConfig

Проверяет, что реализованные ключи содержат значения, указывающие на вызываемые функции.

Возвращает

void

Выбрасывает

Cake\Core\Exception\CakeException
если конфигурация неверна

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

$_config protected

Конфигурация во время выполнения

Тип

array

$_configInitialized protected

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

Тип

bool

$_defaultConfig protected

Конфигурация по умолчанию

Эти значения объединяются с пользовательской конфигурацией при использовании данного поведения.

Тип

array

$_primaryKey protected

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

Тип

string

$_reflectionCache protected static

Кэш методов рефлексии для поведений.

Хранит отраженные методы + методы поиска по классам. Это предотвращает многократное отражение одного и того же класса в одном процессе.

Тип

array

$_table protected

Экземпляр таблицы.

Тип

Cake\ORM\Table

© 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/4.2/class-Cake.ORM.Behavior.TreeBehavior.html

Spec-Zone.ru

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