Класс EagerLoader
Предоставляет методы для хранения ассоциаций, которые должны быть загружены с жадностью для таблицы после предоставления запроса, и делегирует задачу создания необходимых объединений и форматирования результатов, чтобы эти ассоциации могли быть частью набора результатов.
Краткое описание свойств
-
$_aliasListprotectedСписок имён ассоциаций, которые должны быть загружены с жадностьюarray -
$_autoFieldsprotectedbooleanУправляет тем, будут ли поля из связанных таблиц загружены с жадностью. Если установлено в false, поля из ассоциаций не будут загружены.
-
$_containOptionsprotectedarrayСписок опций, принимаемых ассоциациями в индексе contain(), для более быстрого доступа.
-
$_containmentsprotectedarrayВложенный массив, описывающий ассоциацию, которая должна быть получена, и опции, которые должны быть применены к каждой из них (если таковые имеются).
-
$_joinsMapprotectedarrayКарта псевдонимов таблиц, указывающая на объекты ассоциаций, которые они представляют для запроса.
-
$_loadExternalprotectedСписок ассоциаций, которые должны быть загружены с помощью отдельного запросаCake\ORM\EagerLoadable[] - Другой экземпляр EagerLoader, который будет использоваться для ассоциаций «сопоставления».
$_matchingprotected -
$_normalizedprotectedCake\ORM\EagerLoadable[]|Cake\ORM\EagerLoadable|nullСодержит вложенный массив с скомпилированным деревом содержаний. Это нормализованная версия массива содержаний, предоставленного пользователем.
Краткое описание методов
- __clone() publicРеализация хука клонирования
- _buildAssociationsMap() protected
Внутренний метод для построения карты, используемой для возвращаемого значения метода associationsMap().
- _collectKeys() protected
Вспомогательная функция для возвращения ключей из записей запроса, которые будут использованы для жадной загрузки ассоциаций.
- _correctStrategy() protected
Изменяет стратегию получения ассоциации при необходимости из-за дублирования под одной прямой цепочкой ассоциаций.
- _fixStrategies() protected
Проходит по списку объединяемых псевдонимов и корректирует стратегии получения, чтобы избежать коллизий псевдонимов в сгенерированных запросах.
- _groupKeys() protected
Вспомогательная функция, используемая для итерации по оператору и извлечения столбцов, определенных в $collectKeys.
- _normalizeContain() protected
Вспомогательная функция, ответственная за полную нормализацию глубоких ассоциаций, определённых с помощью
contain(). - _reformatContain() protected
Форматирует массив containments таким образом, что ассоциации всегда задаются как ключи в массиве. Эта функция объединяет исходный массив ассоциаций с новыми предоставленными ассоциациями.
- _resolveJoins() protected
Вспомогательная функция, используемая для компиляции списка всех ассоциаций, которые могут быть объединены в запросе.
- addToJoinsMap() public
Регистрирует псевдоним таблицы, обычно загружаемый как объединение в запросе, как принадлежащий к ассоциации. Это помогает хидраторам понять, что делать со столбцами, поступающими из такой объединённой таблицы.
- associationsMap() public
Возвращает массив, имеющий в качестве ключей пунктирную цепочку ассоциаций, участвующих в этом жадном загрузчике. Значения массива будут содержать следующие ключи.
- attachAssociations() public
Изменяет переданный запрос, чтобы применить объединения или любые другие преобразования, необходимые для жадной загрузки ассоциаций, описанных в массиве
contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, т.е. тех, которые не могут быть загружены без выполнения отдельного запроса. - attachableAssociations() public
Возвращает массив с ассоциациями, которые могут быть получены с помощью одного запроса; ключами массива являются псевдонимы ассоциаций, а значениями — массив объектов Cake\ORM\EagerLoadable.
- Устанавливает/получает, будут ли поля содержащих ассоциаций загружаться автоматически.
- clearContain() publicУдаляет любые существующие содержащие ассоциации, которые не соответствуют заданным параметрам.
- contain() public
Устанавливает список ассоциаций, которые должны быть загружены с жадностью для определённой таблицы, когда предоставляется запрос. Список связанных таблиц, переданных в этот метод, должен быть предварительно задан как ассоциации с помощью API таблицы.
- enableAutoFields() publicУстанавливает, будут ли поля содержащих ассоциаций загружаться автоматически.
- externalAssociations() public
Возвращает массив с ассоциациями, которые должны быть получены с помощью отдельного запроса; каждый элемент массива будет содержать объект Cake\ORM\EagerLoadable.
- getContain() public
Получает список ассоциаций, которые должны быть загружены с жадностью для определенной таблицы при предоставлении запроса. Список связанных таблиц, переданных в этот метод, должен быть предварительно задан как ассоциации с помощью API таблиц.
- getMatching() publicВозвращает текущее дерево ассоциаций для сопоставления.
- isAutoFieldsEnabled() publicПолучает, будут ли поля содержащих ассоциаций загружаться автоматически.
- loadExternal() public
Преобразует переданный объект оператора, чтобы вставить данные из ассоциаций, которые нельзя объединить напрямую.
-
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать точку с разделителем путь ассоциаций в этот метод в качестве первого параметра, это приведет к установке всех этих ассоциаций с опцией
matching. - normalized() public
Возвращает полностью нормализованный массив ассоциаций, которые должны быть загружены с жадностью для таблицы. Нормализованный массив перестроит исходный массив, отсортировав все ассоциации под одним ключом и специальные опции под другим.
- setMatching() public
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать точку с разделителем путь ассоциаций в этот метод в качестве первого параметра, это приведет к установке всех этих ассоциаций с опцией
matching.
Подробное описание методов
__clone()source public
__clone( )
Реализация хука клонирования
Клонирует также жадный загрузчик _matching.
_buildAssociationsMap()source protected
_buildAssociationsMap( array $map , array $level , boolean $matching = false )
Внутренний метод для построения карты, используемой для возвращаемого значения метода associationsMap().
Параметры
- массив
$map - Исходный массив для карты.
- массив
$level - Массив экземпляров EagerLoadable.
- булево
$matchingпо умолчанию false - Является ли это ассоциацией, загруженной через
matching().
Возвращает
массив_collectKeys()source protected
_collectKeys( array $external , Cake\ORM\Query $query , Cake\Database\Statement\BufferedStatement $statement )
Вспомогательная функция для получения ключей из записей запроса, которые будут использованы для леничной загрузки ассоциаций.
Параметры
- массив
$external - список внешних ассоциаций, которые необходимо загрузить
-
Cake\ORM\Query$query - Запрос, из которого были получены результаты
-
Cake\Database\Statement\BufferedStatement$statement - Выполняемая команда
Возвращает
массив_correctStrategy()source protected
_correctStrategy( Cake\ORM\EagerLoadable $loadable )
Изменяет стратегию извлечения ассоциаций, если необходимо, из-за дублирования под одной и той же прямой цепочкой ассоциаций.
Параметры
- Cake\ORM\EagerLoadable
$loadable - Настройки ассоциации
_fixStrategies()source protected
_fixStrategies( )
Итерирует список псевдонимов присоединяемых таблиц и корректирует стратегии извлечения, чтобы избежать коллизий псевдонимов в сгенерированных запросах.
Эта функция работает со ссылками на массивы, сгенерированные функцией _normalizeContain().
_groupKeys()source protected
_groupKeys( Cake\Database\Statement\BufferedStatement $statement , array $collectKeys )
Вспомогательная функция для итерации команды и извлечения столбцов, определенных в $collectKeys.
Параметры
-
Cake\Database\Statement\BufferedStatement$statement - Команда для чтения.
- массив
$collectKeys - Ключи для сбора
Возвращает
массив_normalizeContain()source protected
_normalizeContain( Cake\ORM\Table $parent , string $alias , array $options , array $paths )
Вспомогательная функция, отвечающая за полную нормализацию глубоких ассоциаций, определенных с использованием contain().
Параметры
-
Cake\ORM\Table$parent - Владеющая сторона ассоциации
- строка
$alias - Имя ассоциации для загрузки
- массив
$options - Список дополнительных параметров для этой ассоциации
- массив
$paths Массив из двух значений: первый — список строк, разделенных точками, представляющих ассоциации, ведущие к этой
$aliasв цепочке загружаемых ассоциаций. Второе значение — путь для поиска записи соответствующей ассоциации в свойствах сущностей.
Возвращает
Cake\ORM\EagerLoadableОбъект с нормализованными ассоциациями
Выбрасывает
InvalidArgumentExceptionКогда указания содержат ссылки на несуществующие ассоциации.
_reformatContain()source protected
_reformatContain( array $associations , array $original )
Форматирует массив содержаний так, чтобы ассоциации всегда задавались в качестве ключей в массиве. Эта функция объединяет исходный массив ассоциаций с новыми предоставленными ассоциациями.
Параметры
- массив
$associations - массив содержаний, предоставленный пользователем
- массив
$original Исходный массив содержаний для объединения с новым массивом
Возвращает
массив_resolveJoins()source protected
_resolveJoins( array $associations , array $matching = [] )
Вспомогательная функция для компиляции списка всех ассоциаций, которые могут быть объединены в запросе.
Параметры
- массив
$associations - список ассоциаций, из которых получить объединения.
- массив
$matchingдополнительно [] - список ассоциаций, которые должны быть принудительно объединены.
Возвращает
массивaddToJoinsMap()source public
addToJoinsMap( string $alias , Cake\ORM\Association $assoc , boolean $asMatching = false , string $targetProperty = null )
Регистрирует псевдоним таблицы, обычно загружаемый как объединение в запросе, как принадлежащий ассоциации. Это помогает хидраторам понимать, что делать со столбцами, поступающими из такой объединённой таблицы.
Параметры
- строка
$alias - Псевдоним таблицы, как он появляется в запросе.
-
Cake\ORM\Association$assoc Объект ассоциации, который представляет псевдоним; будет нормализован
- булево
$asMatchingдополнительно false Указывает, следует ли рассматривать это объединение как ассоциацию 'сопоставления'.
- строка
$targetPropertyдополнительно null Имя свойства, где результаты объединения должны быть вложены. Если не передано, будет использоваться свойство по умолчанию для ассоциации.
associationsMap()source public
associationsMap( Cake\ORM\Table $table )
Возвращает массив, ключами которого является путь с точками ассоциаций, участвующих в этом леничном загрузчике. Значения массива будут содержать следующие ключи:
- alias: псевдоним ассоциации
- instance: экземпляр ассоциации
- canBeJoined: возможно ли загрузить ассоциацию с помощью JOIN
- entityClass: сущность, которая должна использоваться для хидрации результатов
- nestKey: путь с точками, который можно использовать для правильной вставки данных в результаты.
- matching: является ли это ассоциацией, загруженной с помощью
matching().
Параметры
-
Cake\ORM\Table$table Таблица, содержащая ассоциацию, которая будет нормализована
Возвращает
массивattachAssociations()source public
attachAssociations( Cake\ORM\Query $query , Cake\ORM\Table $repository , boolean $includeFields )
Изменяет переданный запрос, чтобы применить объединения или любые другие преобразования, необходимые для леничной загрузки ассоциаций, описанных в массиве contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, т. е. тех, которые нельзя загрузить без выполнения отдельного запроса.
Параметры
-
Cake\ORM\Query$query - Запрос, который нужно изменить
-
Cake\ORM\Table$repository - Репозиторий, содержащий ассоциации
- булево
$includeFields должны ли быть добавлены все поля из ассоциаций в переданный запрос. Это можно переопределить в соответствии с настройками, определенными для каждой ассоциации в массиве containments
attachableAssociations()source public
attachableAssociations( Cake\ORM\Table $repository )
Возвращает массив с ассоциациями, которые можно получить с помощью одного запроса. Ключами массива являются псевдонимы ассоциаций, а значениями — массив объектов Cake\ORM\EagerLoadable.
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации, которые должны быть добавлены
Возвращает
массивautoFields()source public deprecated
autoFields( boolean|null $enable = null )
Устанавливает/получает, будут ли автоматически загружаться поля содержащих ассоциаций.
Устарело
3.4.0 Используйте enableAutoFields()/isAutoFieldsEnabled() вместо этого.Параметры
- булево|null
$enableдополнительно null - Значение для установки.
Возвращает
булевоТекущее значение.
clearContain()source public
clearContain( )
Удаляет все существующие содержащие ассоциации, основанные на несоответствии.
Это сбросит/очистит все содержащие ассоциации, которые не были добавлены с помощью matching().
contain()source public
contain( array|string $associations = [] , callable $queryBuilder = null )
Устанавливает список ассоциаций, которые должны быть загружены вместе с определённой таблицей при выполнении запроса. Список связанных таблиц, переданный в этот метод, должен быть предварительно задан в качестве ассоциаций с помощью API таблицы.
Ассоциации могут быть произвольно вложены с использованием нотации точек или вложенных массивов. Это позволяет этому объекту рассчитывать объединения или любые дополнительные запросы, которые необходимо выполнить, чтобы получить требуемые связанные данные.
Часть получения данных устарела начиная с версии 3.6.0. Используйте вместо этого getContain().
Допустимые параметры для каждой переданной ассоциации:
- foreignKey: Используется для установки другого поля для сопоставления обеих таблиц. Если установлено в false, автоматически не будут генерироваться условия объединения.
- fields: Массив полей, которые должны быть извлечены из ассоциации.
- queryBuilder: Эквивалентно передаче вызываемого объекта вместо массива параметров.
- matching: Указывает классу ассоциации, что он должен отфильтровать основной запрос по результатам, полученным этим классом.
- joinType: Для объединяемых ассоциаций - тип SQL-объединения, который следует использовать.
- strategy: Стратегия загрузки (объединение, выборка, подзапрос).
Параметры
- массив|строка
$associationsнеобязательно [] Список псевдонимов таблиц, которые будут запрошены. При многократном вызове этого метода предыдущий список будет сливаться с новым.
- вызываемый объект
$queryBuilderнеобязательно null - Вызываемый объект для построения запроса.
Возвращает
массивСодержимое.
Исключения
InvalidArgumentExceptionПри использовании $queryBuilder с массивом $associations
enableAutoFields()source public
enableAutoFields( boolean $enable = true )
Устанавливает, загружать ли поля связанных ассоциаций автоматически.
Параметры
- булево
$enableнеобязательно true - Значение для установки.
Возвращает
$this
externalAssociations()source public
externalAssociations( Cake\ORM\Table $repository )
Возвращает массив ассоциаций, которые необходимо загрузить с помощью отдельного запроса. Каждый элемент массива будет содержать объект Cake\ORM\EagerLoadable.
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации для загрузки.
Возвращает
Cake\ORM\EagerLoadable[]getContain()source public
getContain( )
Возвращает список ассоциаций, которые должны быть загружены вместе с определённой таблицей при выполнении запроса. Список связанных таблиц, переданный в этот метод, должен быть предварительно задан в качестве ассоциаций с помощью API таблицы.
Возвращает
массивСодержимое.
getMatching()source public
getMatching( )
Возвращает текущее дерево ассоциаций для сопоставления.
Возвращает
массивРезультирующий массив содержаний
isAutoFieldsEnabled()source public
isAutoFieldsEnabled( )
Возвращает значение, определяющее, загружаются ли поля связанных ассоциаций автоматически.
Возвращает
булевоТекущее значение.
loadExternal()source public
loadExternal( Cake\ORM\Query $query , Cake\Database\StatementInterface $statement )
Декорирует переданный объект запроса для вставки данных из ассоциаций, которые нельзя напрямую объединить.
Параметры
-
Cake\ORM\Query$query Запрос, для которого необходимо произвести жадную загрузку внешних ассоциаций.
-
Cake\Database\StatementInterface$statement - Запрос, созданный после выполнения $query.
Возвращает
Cake\Database\StatementInterfaceИзменённый объект запроса с дополнительными загрузчиками
matching()source public deprecated
matching( string|null $assoc = null , callable $builder = null , array $options = [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь к ассоциациям, разделённый точками, в качестве первого параметра этого метода. Это приведет к установке всех этих ассоциаций с опцией matching.
Если вызов осуществляется без аргументов, он вернёт текущее дерево ассоциаций для сопоставления.
Устаревшее
3.4.0 Используйте setMatching()/getMatching() вместо этого.Параметры
- строка|null
$assocнеобязательно null - Одна ассоциация или путь к ассоциациям, разделённый точками.
- вызываемый объект
$builderнеобязательно null Функция обратного вызова, используемая для установки дополнительных параметров для запроса фильтрации.
- массив
$optionsнеобязательно [] Дополнительные параметры для сопоставления ассоциаций, такие как 'joinType' и 'fields'.
Возвращает
массивРезультирующий массив содержаний
normalized()source public
normalized( Cake\ORM\Table $repository )
Возвращает полностью нормализованный массив ассоциаций, которые должны быть жадно загружены для таблицы. Нормализованный массив перестроит исходный массив, отсортировав все ассоциации под одним ключом и особые параметры под другим.
Каждый уровень дерева ассоциаций будет преобразован в объект Cake\ORM\EagerLoadable, содержащий всю необходимую информацию для объектов ассоциаций, чтобы загрузить информацию из базы данных.
Кроме того, он установит ключ 'instance' для каждой ассоциации, содержащий экземпляр ассоциации из соответствующей исходной таблицы.
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциацию, которая будет нормализована.
Возвращает
массивsetMatching()source public
setMatching( string $assoc , callable $builder = null , array $options = [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь к ассоциациям, разделённый точками, в качестве первого параметра этого метода. Это приведёт к установке всех этих ассоциаций с опцией matching.
Параметры
- 'joinType': INNER, OUTER, ...
- 'fields': Поля для включения
Параметры
- строка
$assoc - Одна ассоциация или путь к ассоциациям, разделённый точками.
- вызываемый объект
$builderнеобязательно null Функция обратного вызова, используемая для установки дополнительных параметров для запроса фильтрации.
- массив
$optionsнеобязательно [] - Дополнительные параметры для сопоставления ассоциаций.
Возвращает
$this
Подробное описание свойств
$_autoFieldssource
protected булево
Определяет, загружаются ли поля из связанных таблиц жадно. Если установлено в false, поля из ассоциаций не будут загружаться.
true
$_containOptionssource
protected массив
Список параметров, принимаемых ассоциациями в индексе contain(), для более быстрого доступа.
[
'associations' => 1,
'foreignKey' => 1,
'conditions' => 1,
'fields' => 1,
'sort' => 1,
'matching' => 1,
'queryBuilder' => 1,
'finder' => 1,
'joinType' => 1,
'strategy' => 1,
'negateMatch' => 1
] $_containmentssource
protected массив
Вложенный массив, описывающий ассоциацию для загрузки и параметры, которые необходимо применить к каждой из них (если есть).
[]
$_joinsMapsource
protected массив
Карта псевдонимов таблиц, указывающая на объекты ассоциаций, которые они представляют для запроса.
[]
$_loadExternalsource
protected Cake\ORM\EagerLoadable[]
Список ассоциаций, которые должны быть загружены с помощью отдельного запроса
[]
$_matchingsource
protected Cake\ORM\EagerLoader
Другой экземпляр EagerLoader, который будет использоваться для ассоциаций «сопоставления».
$_normalizedsource
protected Cake\ORM\EagerLoadable[]|Cake\ORM\EagerLoadable|null
Содержит вложенный массив с скомпилированным деревом содержаний. Это нормализованная версия массива содержаний, предоставленного пользователем.
© 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.6/class-Cake.ORM.EagerLoader.html