Класс 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.
- 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: Стратегия загрузки (join, select, subquery).
Параметры
- массив|строка
$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[]getMatching()source public
getMatching( )
Возвращает текущее дерево ассоциаций для сопоставления.
Возвращает
массивРезультирующий массив containments
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
matching( string|null $assoc null , callable $builder null , array $options [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого данного запроса на основе результатов поиска записей для этой ассоциации. В качестве первого параметра вы можете передать путь с разделителем «точка» к ассоциациям, это приведет к установлению всех этих ассоциаций с параметром matching.
Если вызвана без аргументов, она вернёт текущее дерево ассоциаций для сопоставления.
Устарело
3.4.0 Используйте setMatching()/getMatching() вместо этого.Параметры
- строка|null
$assocнеобязательно null - Одна ассоциация или путь к ассоциациям, разделённый точкой.
- вызываемый объект
$builderнеобязательно null Функция обратного вызова, которая будет использоваться для установки дополнительных параметров к запросу фильтрации.
- массив
$optionsнеобязательно [] Дополнительные параметры для сопоставления ассоциаций, такие как 'joinType' и 'fields'.
Возвращает
массивРезультирующий массив containments
normalized()source public
normalized( Cake\ORM\Table $repository )
Возвращает полностью нормализованный массив ассоциаций, которые должны быть загружены с помощью eager loading для таблицы. Нормализованный массив перестроит исходный массив, отсортировав все ассоциации под одним ключом и специальные параметры под другим.
Каждый уровень дерева ассоциаций будет преобразован в объект Cake\ORM\EagerLoadable, который содержит всю необходимую информацию для объектов ассоциации для загрузки информации из базы данных.
Кроме того, он установит ключ 'instance' для каждой ассоциации, содержащий экземпляр ассоциации из соответствующей исходной таблицы.
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциацию, которая будет нормализована.
Возвращает
массивsetMatching()source public
setMatching( string $assoc , callable $builder null , array $options [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого запроса на основе результатов поиска записей для данной ассоциации. Вы можете передать путь к ассоциациям, разделенный точкой, в качестве первого параметра этого метода; это приведет к установке всех этих ассоциаций с параметром matching.
Параметры
- 'joinType': ВНУТРЕННЕЕ, ВНЕШНЕЕ, ...
- 'fields': Поля для включения
Параметры
- строка
$assoc - Одна ассоциация или путь к ассоциациям, разделенный точкой.
- функция
$builderнеобязательно null функция обратного вызова для установки дополнительных параметров в фильтрующий запрос
- массив
$optionsнеобязательно [] - Дополнительные параметры для сопоставления ассоциаций.
Возвращаемое значение
$this
Подробное описание свойств
$_aliasListsource
protected массив
Содержит список имен ассоциаций, которые должны быть загружены с жадным выполнением
[]
$_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–2017 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.4/class-Cake.ORM.EagerLoader.html