Класс 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
Форматирует массив содержаний таким образом, чтобы ассоциации всегда устанавливались как ключи в массиве. Эта функция объединяет исходный массив ассоциаций с новыми предоставленными ассоциациями.
- _resolveJoins() protected
Вспомогательная функция, используемая для компиляции списка всех ассоциаций, которые могут быть объединены в запросе.
- addToJoinsMap() public
Регистрирует псевдоним таблицы, как правило, загруженный как объединение в запросе, как принадлежащий ассоциации. Это помогает хидраторам понимать, что делать со столбцами, поступающими из такой объединённой таблицы.
- associationsMap() public
Возвращает массив, имеющий в качестве ключей пунктирное обозначение путей ассоциаций, участвующих в этом загрузителе с жадностью. Значения массива будут содержать следующие ключи.
- attachAssociations() public
Изменяет переданный запрос, чтобы применить соединения или любые другие преобразования, необходимые для загрузки с жадностью ассоциаций, описанных в массиве
contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, т.е. тех, которые не могут быть загружены без выполнения отдельного запроса. - attachableAssociations() public
Возвращает массив с ассоциациями, которые могут быть извлечены с помощью одного запроса, ключи массива — псевдонимы ассоциаций, а значения — массив объектов Cake\ORM\EagerLoadable.
- autoFields() publicУстанавливает/получает, будут ли автоматически загружаться поля содержащих ассоциаций.
- clearContain() publicУдаляет любые существующие содержащиеся ассоциации, не соответствующие критериям.
- contain() public
Устанавливает список ассоциаций, которые должны быть загружены с жадностью вместе с определенной таблицей при предоставлении запроса. Список связанных таблиц, переданный в этот метод, должен быть предварительно установлен как ассоциации с помощью API таблицы.
- enableAutoFields() publicУстанавливает, будут ли автоматически загружаться поля содержащих ассоциаций.
- externalAssociations() public
Возвращает массив с ассоциациями, которые необходимо извлечь с помощью отдельного запроса, каждое значение массива будет содержать объект Cake\ORM\EagerLoadable.
- getMatching() publicВозвращает текущее дерево ассоциаций для сопоставления.
- isAutoFieldsEnabled() publicПолучает, будут ли автоматически загружаться поля содержащих ассоциаций.
- loadExternal() public
Форматирует переданный объект оператора, чтобы ввести данные из ассоциаций, которые не могут быть объединены напрямую.
- matching() 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 должны ли быть добавлены все поля из ассоциаций в переданный запрос. Это можно переопределить в соответствии с настройками, определёнными для каждой ассоциации в массиве содержаний
attachableAssociations()source public
attachableAssociations( Cake\ORM\Table $repository )
Возвращает массив с ассоциациями, которые могут быть получены с помощью одного запроса. Ключи массива — псевдонимы ассоциаций, а значения — массивы с объектами Cake\ORM\EagerLoadable.
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации, которые должны быть добавлены
Возвращает
массивautoFields()source public
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 таблицы.
Ассоциации могут быть произвольно вложены с помощью нотации точек или вложенных массивов, что позволяет этому объекту вычислять соединения или любые дополнительные запросы, которые необходимо выполнить, чтобы получить необходимые связанные данные.
Допустимые параметры для каждой переданной ассоциации:
- foreignKey: Используется для установки другого поля для сопоставления обеих таблиц. Если установлено в false, условия соединения не будут автоматически генерироваться
- fields: Массив с полями, которые должны быть извлечены из ассоциации
- queryBuilder: Эквивалентно передаче вызываемого объекта вместо массива параметров
- matching: Указывает классу ассоциации, что он должен отфильтровать основной запрос по результатам, полученным этим классом.
- joinType: Для соединяемых ассоциаций тип SQL-соединения, который нужно использовать.
- strategy: Стратегия загрузки (соединение, выборка, подзапрос)
Parameters
- array|string
$associationsoptional [] Список псевдонимов таблиц, которые должны быть запрошены. При многократном вызове этого метода предыдущий список будет объединён с новым.
- callable
$queryBuilderoptional null - Вызываемый объект-билдер запроса
Returns
arrayСодержания.
Throws
InvalidArgumentExceptionПри использовании $queryBuilder с массивом $associations
enableAutoFields()source public
enableAutoFields( boolean $enable true )
Устанавливает, будут ли автоматически загружаться поля содержащихся ассоциаций.
Parameters
- boolean
$enableoptional true - Значение для установки.
Returns
$this
externalAssociations()source public
externalAssociations( Cake\ORM\Table $repository )
Возвращает массив ассоциаций, которые нужно загрузить с помощью отдельного запроса. Каждое значение массива будет содержать объект Cake\ORM\EagerLoadable.
Parameters
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации, которые нужно загрузить
Returns
Cake\ORM\EagerLoadable[]getMatching()source public
getMatching( )
Возвращает текущее дерево ассоциаций, которые должны быть сопоставлены.
Returns
arrayРезультат массива containments
isAutoFieldsEnabled()source public
isAutoFieldsEnabled( )
Получает, будут ли автоматически загружаться поля содержащихся ассоциаций.
Returns
booleanТекущее значение.
loadExternal()source public
loadExternal( Cake\ORM\Query $query , Cake\Database\StatementInterface $statement )
Декорирует переданный объект инструкции для вставки данных из ассоциаций, которые нельзя напрямую присоединить.
Parameters
-
Cake\ORM\Query$query Запрос, для которого нужно выполнить eager загрузку внешних ассоциаций
-
Cake\Database\StatementInterface$statement - Инструкция, созданная после выполнения $query
Returns
Cake\Database\StatementInterfaceИзменённая инструкция с дополнительными загрузчиками
matching()source public
matching( string|null $assoc null , callable $builder null , array $options [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь с разделителями «точка» ассоциаций в этот метод в качестве первого параметра, это переведётся в установку всех этих ассоциаций с параметром matching.
Если вызван без аргументов, он вернёт текущее дерево ассоциаций для сопоставления.
Deprecated
3.4.0 Используйте setMatching()/getMatching() вместо этого.Parameters
- string|null
$assocoptional null - Одна ассоциация или путь с разделителями «точка» ассоциаций.
- callable
$builderoptional null Функция обратного вызова, используемая для установки дополнительных параметров для фильтрации запроса
- array
$optionsoptional [] Дополнительные параметры для сопоставления ассоциаций, такие как 'joinType' и 'fields'
Returns
arrayРезультат массива containments
normalized()source public
normalized( Cake\ORM\Table $repository )
Возвращает полностью нормализованный массив ассоциаций, которые должны быть загружены для таблицы с помощью eager loading. Нормализованный массив перестроит исходный массив, отсортировав все ассоциации под одним ключом и дополнительные параметры под другим.
Каждый уровень дерева ассоциаций преобразуется в объект Cake\ORM\EagerLoadable, который содержит всю необходимую информацию для объектов ассоциаций, чтобы загрузить данные из базы данных.
Кроме того, он установит ключ «instance» для каждой ассоциации, содержащий экземпляр ассоциации из соответствующей исходной таблицы.
Parameters
-
Cake\ORM\Table$repository Таблица, содержащая ассоциацию, которая будет нормализована
Returns
arraysetMatching()source public
setMatching( string $assoc , callable $builder null , array $options [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь с разделителями «точка» ассоциаций в этот метод в качестве первого параметра, это переведётся в установку всех этих ассоциаций с параметром matching.
Параметры
- 'joinType': INNER, OUTER, ...
- 'fields': Поля для включения
Parameters
- string
$assoc - Одна ассоциация или путь с разделителями «точка» ассоциаций.
- callable
$builderoptional null Функция обратного вызова, используемая для установки дополнительных параметров для фильтрации запроса
- array
$optionsoptional [] - Дополнительные параметры для сопоставления ассоциаций.
Returns
$this
Подробное описание свойств
$_aliasListsource
protected array
Содержит список имён ассоциаций, которые должны быть загружены с помощью eager loading.
[]
$_autoFieldssource
protected boolean
Управляет тем, будут ли поля из связанных таблиц загружаться с помощью eager loading. Если установлено в false, поля из ассоциаций не будут загружаться.
true
$_containOptionssource
protected array
Список параметров, принимаемых ассоциациями в 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 array
Вложенный массив, описывающий ассоциацию для загрузки и параметры, которые нужно применить к каждой из них (если таковые имеются).
[]
$_joinsMapsource
protected array
Карта псевдонимов таблиц, указывающая на объекты ассоциаций, которые они представляют в запросе.
[]
$_loadExternalsource
protected Cake\ORM\EagerLoadable[]
Список ассоциаций, которые должны быть загружены с помощью отдельного запроса.
[]
$_matchingsource
protected Cake\ORM\EagerLoader
Другой экземпляр EagerLoader, который будет использоваться для 'сопоставления' ассоциаций.
$_normalizedsource
protected Cake\ORM\EagerLoadable[]|Cake\ORM\EagerLoadable|null
Содержит вложенный массив с скомпилированным деревом включений. Это нормализованная версия массива включений, предоставленного пользователем.
© 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.EagerLoader.html