Класс EagerLoader
Предоставляет методы для хранения ассоциаций, которые должны быть загружены с помощью eager loading для таблицы после предоставления запроса, и делегирует задачу создания необходимых соединений и оформления результатов, так чтобы эти ассоциации могли быть частью результирующего набора.
Краткое описание полей
- $_aliasList protected
arrayСодержит список имен ассоциаций, которые должны быть загружены с помощью eager loading
- $_autoFields protected
boolУправляет тем, будут ли поля из связанных таблиц загружены с помощью eager loading. Если установлено значение false, поля из ассоциаций загружаться не будут.
- $_containOptions protected
array<string, int>Список параметров, принимаемых ассоциациями в contain(), индексированных по ключу для более быстрого доступа
- $_containments protected
array<string, mixed>Вложенный массив, описывающий ассоциацию, которая должна быть получена, и параметры, которые нужно применить для каждой из них, если таковые имеются
- $_joinsMap protected
arrayСопоставление псевдонимов таблиц, указывающих на объекты ассоциаций, которые они представляют для запроса.
- $_loadExternal protected
arrayCake\ORM\EagerLoadable>Список ассоциаций, которые должны быть загружены с помощью отдельного запроса
- $_matching protected
Cake\ORM\EagerLoader|nullДругой экземпляр EagerLoader, который будет использоваться для ассоциаций "matching".
- $_normalized protected
Cake\ORM\EagerLoadable|arrayCake\ORM\EagerLoadable>|nullСодержит вложенный массив с скомпилированным деревом containments. Это нормализованная версия предоставленного пользователем массива containments.
Краткое описание методов
-
__clone() public
Обрабатывает клонирование eager loaders и eager loadables.
-
_buildAssociationsMap() protected
Внутренний метод для создания карты, которая используется для возвращаемого значения метода associationsMap().
-
_collectKeys() protected
Вспомогательная функция, используемая для возврата ключей из записей запроса, которые будут использоваться для загрузки ассоциаций с помощью eager loading.
-
_correctStrategy() protected
Изменяет стратегию извлечения ассоциаций, если это необходимо из-за дубликатов в одной и той же цепочке прямых ассоциаций
-
_fixStrategies() protected
Перебирает список соединяемых псевдонимов и исправляет стратегии извлечения, чтобы избежать коллизий псевдонимов в генерируемых запросах.
-
_groupKeys() protected
Вспомогательная функция, используемая для перебора инструкции и извлечения столбцов, определенных в $collectKeys
-
_normalizeContain() protected
Вспомогательная функция, отвечающая за полную нормализацию глубоких ассоциаций, определенных с помощью
contain() -
_reformatContain() protected
Форматирует массив containments так, чтобы ассоциации всегда устанавливались в качестве ключей в массиве. Эта функция объединяет исходный массив ассоциаций с новыми предоставленными ассоциациями
-
_resolveJoins() protected
Вспомогательная функция, используемая для компиляции списка всех ассоциаций, которые могут быть объединены в запросе.
-
addToJoinsMap() public
Регистрирует псевдоним таблицы, обычно загружаемый как соединение в запросе, как принадлежащий ассоциации. Это помогает гидраторам понять, что делать со столбцами, поступающими из такой объединенной таблицы.
-
associationsMap() public
Возвращает массив, имеющий в качестве ключей точечный путь ассоциаций, участвующих в этом eager loader. Значения массива будут содержать следующие ключи
-
attachAssociations() public
Изменяет переданный запрос для применения соединений или любых других преобразований, необходимых для загрузки ассоциаций, описанных в массиве
contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, то есть тех, которые невозможно загрузить без выполнения отдельного запроса. -
attachableAssociations() public
Возвращает массив с ассоциациями, которые могут быть получены с помощью одного запроса, ключи массива - это псевдонимы ассоциаций, а значения будут содержать массив с объектами Cake\ORM\EagerLoadable.
-
clearContain() public
Удаляет все существующие containments, не основанные на matching.
-
contain() public
Устанавливает список ассоциаций, которые должны быть загружены с помощью eager loading для определенной таблицы при предоставлении запроса. Список связанных таблиц, переданных этому методу, должен быть предварительно установлен как ассоциации с помощью API таблицы.
-
disableAutoFields() public
Отключить автоматическую загрузку полей содержащихся ассоциаций.
-
enableAutoFields() public
Устанавливает, будут ли содержащиеся ассоциации автоматически загружать поля.
-
externalAssociations() public
Возвращает массив с ассоциациями, которые необходимо извлекать с помощью отдельного запроса, каждое значение массива будет содержать объект {@link \Cake\ORM\EagerLoadable}.
-
getContain() public
Получает список ассоциаций, которые должны быть загружены с помощью eager loading для определенной таблицы при предоставлении запроса. Список связанных таблиц, переданных этому методу, должен быть предварительно установлен как ассоциации с помощью API таблицы.
-
getMatching() public
Возвращает текущее дерево ассоциаций, которые должны быть сопоставлены.
-
isAutoFieldsEnabled() public
Получает информацию о том, будут ли содержащиеся ассоциации автоматически загружать поля.
-
loadExternal() public
Декорирует переданный объект инструкции, чтобы внедрить данные из ассоциаций, которые невозможно напрямую соединить.
-
normalized() public
Возвращает полностью нормализованный массив ассоциаций, которые должны быть загружены с помощью eager loading для таблицы. Нормализованный массив перестроит исходный массив, сортируя все ассоциации под одним ключом, а специальные параметры - под другим.
-
setMatching() public
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать в этот метод точечно разделенный путь ассоциаций в качестве первого параметра, это приведет к установке всех этих ассоциаций с параметром
matching.
Подробное описание методов
__clone() public
__clone(): void
Обрабатывает клонирование eager loaders и eager loadables.
Returns
void_buildAssociationsMap() protected
_buildAssociationsMap(array $map, arrayCake\ORM\EagerLoadable> $level, bool $matching = false): array
Внутренний метод для построения карты, которая используется для возвращаемого значения метода associationsMap().
Parameters
-
array$map Начальный массив для карты.
-
arrayCake\ORM\EagerLoadable>$level Массив экземпляров EagerLoadable.
-
bool$matching optional Является ли это ассоциацией, загруженной через
matching().
Returns
array_collectKeys() protected
_collectKeys(arrayCake\ORM\EagerLoadable> $external, Cake\ORM\Query $query, Cake\Database\StatementInterface $statement): array
Вспомогательная функция, используемая для возврата ключей из записей запроса, которые будут использоваться для загрузки ассоциаций.
Parameters
-
arrayCake\ORM\EagerLoadable>$external Список внешних ассоциаций для загрузки
-
Cake\ORM\Query$query Запрос, из которого были сгенерированы результаты
-
Cake\Database\StatementInterface$statement Оператор для работы
Returns
array_correctStrategy() protected
_correctStrategy(Cake\ORM\EagerLoadable $loadable): void
Изменяет стратегию извлечения ассоциаций, если это необходимо из-за дублирования в одной и той же цепочке прямых ассоциаций
Parameters
-
Cake\ORM\EagerLoadable$loadable Конфигурация ассоциации
Returns
void_fixStrategies() protected
_fixStrategies(): void
Перебирает список соединяемых псевдонимов и корректирует стратегии извлечения, чтобы избежать коллизий псевдонимов в генерируемых запросах.
Эта функция работает со ссылками на массивы, которые были сгенерированы функцией _normalizeContain().
Returns
void_groupKeys() protected
_groupKeys(Cake\Database\Statement\BufferedStatement $statement, array<string, array> $collectKeys): array
Вспомогательная функция, используемая для перебора оператора и извлечения столбцов, определенных в $collectKeys
Parameters
-
Cake\Database\Statement\BufferedStatement$statement Оператор для чтения.
-
array<string, array>$collectKeys Ключи для сбора
Returns
array_normalizeContain() protected
_normalizeContain(Cake\ORM\Table $parent, string $alias, array<string, mixed> $options, array<string, mixed> $paths): Cake\ORM\EagerLoadable
Вспомогательная функция, отвечающая за полную нормализацию глубоких ассоциаций, определенных с использованием contain()
Parameters
-
Cake\ORM\Table$parent владеющая сторона ассоциации
-
string$alias имя ассоциации для загрузки
-
array<string, mixed>$options список дополнительных параметров для использования для этой ассоциации
-
array<string, mixed>$paths Массив с двумя значениями, первое из которых представляет собой список строк, разделенных точками, представляющих ассоциации, которые ведут к этому
$aliasв цепочке ассоциаций для загрузки. Второе значение — путь, по которому нужно следовать в свойствах сущностей, чтобы получить запись соответствующей ассоциации.
Returns
Cake\ORM\EagerLoadableThrows
InvalidArgumentExceptionКогда включения ссылаются на ассоциации, которые не существуют.
_reformatContain() protected
_reformatContain(array $associations, array $original): array
Форматирует массив включений таким образом, чтобы ассоциации всегда устанавливались в качестве ключей в массиве. Эта функция объединяет исходный массив ассоциаций с новыми предоставленными ассоциациями
Parameters
-
array$associations массив включений, предоставленный пользователем
-
array$original Исходный массив включений для слияния с новым
Returns
array_resolveJoins() protected
_resolveJoins(arrayCake\ORM\EagerLoadable> $associations, arrayCake\ORM\EagerLoadable> $matching = []): arrayCake\ORM\EagerLoadable>
Вспомогательная функция, используемая для компиляции списка всех ассоциаций, которые могут быть объединены в запросе.
Parameters
-
arrayCake\ORM\EagerLoadable>$associations список ассоциаций, из которых нужно получить соединения.
-
arrayCake\ORM\EagerLoadable>$matching optional список ассоциаций, которые должны быть принудительно объединены.
Returns
arrayCake\ORM\EagerLoadable>addToJoinsMap() public
addToJoinsMap(string $alias, Cake\ORM\Association $assoc, bool $asMatching = false, string|null $targetProperty = null): void
Регистрирует псевдоним таблицы, обычно загружаемый как соединение в запросе, как принадлежащий ассоциации. Это помогает гидраторам понимать, что делать со столбцами, поступающими из такой объединенной таблицы.
Parameters
-
string$alias Псевдоним таблицы, как он отображается в запросе.
-
Cake\ORM\Association$assoc Объект ассоциации, который представляет псевдоним; будет нормализован
-
bool$asMatching optional Следует ли рассматривать результаты этого соединения как ассоциацию «соответствия».
-
string|null$targetProperty optional Имя свойства, в котором должны быть вложены результаты соединения. Если не передано, будет использовано свойство по умолчанию для ассоциации.
Returns
voidassociationsMap() public
associationsMap(Cake\ORM\Table $table): array
Возвращает массив, имеющий в качестве ключей точечный путь ассоциаций, которые участвуют в этом eager loader. Значения массива будут содержать следующие ключи
- alias: Псевдоним ассоциации
- instance: Экземпляр ассоциации
- canBeJoined: Будет ли ассоциация загружена с использованием JOIN
- entityClass: Сущность, которая должна использоваться для гидратации результатов
- nestKey: Точечный путь, который можно использовать для правильного вставки данных в результаты.
- matching: Является ли это ассоциацией, загруженной через
matching().
Parameters
-
Cake\ORM\Table$table Таблица, содержащая ассоциацию, которая будет нормализована
Returns
arrayattachAssociations() public
attachAssociations(Cake\ORM\Query $query, Cake\ORM\Table $repository, bool $includeFields): void
Модифицирует переданный запрос, чтобы применить соединения или любые другие преобразования, необходимые для загрузки ассоциаций, описанных в массиве contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, то есть тех, которые не могут быть загружены без выполнения отдельного запроса.
Parameters
-
Cake\ORM\Query$query Запрос, который нужно изменить
-
Cake\ORM\Table$repository Репозиторий, содержащий ассоциации
-
bool$includeFields необходимо ли добавить все поля из ассоциаций в переданный запрос. Это может быть переопределено в соответствии с настройками, определенными для каждой ассоциации в массиве включений
Returns
voidattachableAssociations() public
attachableAssociations(Cake\ORM\Table $repository): arrayCake\ORM\EagerLoadable>
Возвращает массив с ассоциациями, которые можно получить с помощью одного запроса, ключи массива — это псевдонимы ассоциаций, а значения будут содержать массив с объектами Cake\ORM\EagerLoadable.
Parameters
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации для прикрепления
Returns
arrayCake\ORM\EagerLoadable>clearContain() public
clearContain(): void
Удалить любые существующие включения, не основанные на соответствии.
Это сбросит/очистит любые включенные ассоциации, которые не были добавлены с помощью matching().
Returns
voidcontain() public
contain(array|string $associations, callable|null $queryBuilder = null): array
Задает список ассоциаций, которые должны быть нетерпеливо загружены для конкретной таблицы при предоставлении запроса. Список связанных таблиц, переданных этому методу, должен быть предварительно установлен в качестве ассоциаций с помощью API таблицы.
Ассоциации могут быть произвольно вложенными с использованием точечной нотации или вложенных массивов, это позволяет этому объекту вычислять соединения или любые дополнительные запросы, которые должны быть выполнены для получения необходимых связанных данных.
Допустимые параметры для каждой переданной ассоциации:
- foreignKey: используется для установки другого поля для соответствия обеим таблицам, если установлено значение false, условия соединения не будут генерироваться автоматически
- fields: массив с полями, которые должны быть получены из ассоциации
- queryBuilder: эквивалент передаче вызываемого объекта вместо массива параметров
- matching: указывать ли классу ассоциации, что он должен фильтровать основной запрос по результатам, полученным этим классом.
- joinType: для ассоциаций, которые можно соединить, тип соединения SQL, который нужно использовать.
- strategy: стратегия загрузки, которую нужно использовать (join, select, subquery)
Parameters
-
array|string$associations список псевдонимов таблиц, которые необходимо запрашивать. Когда этот метод вызывается несколько раз, он объединяет предыдущий список с новым.
-
callable|null$queryBuilder optional Вызываемый объект построителя запросов
Returns
arrayThrows
InvalidArgumentExceptionПри использовании $queryBuilder с массивом $associations
disableAutoFields() public
disableAutoFields(): $this
Отключить автоматическую загрузку полей содержащихся ассоциаций.
Returns
$thisenableAutoFields() public
enableAutoFields(bool $enable = true): $this
Задает, будут ли содержащиеся ассоциации автоматически загружать поля.
Parameters
-
bool$enable optional Значение для установки.
Returns
$thisexternalAssociations() public
externalAssociations(Cake\ORM\Table $repository): arrayCake\ORM\EagerLoadable>
Возвращает массив с ассоциациями, которые необходимо получить с помощью отдельного запроса, каждое значение массива будет содержать объект {@link \Cake\ORM\EagerLoadable}.
Parameters
-
Cake\ORM\Table$repository Таблица, содержащая ассоциации, которые необходимо загрузить
Returns
arrayCake\ORM\EagerLoadable>getContain() public
getContain(): array
Получает список ассоциаций, которые должны быть нетерпеливо загружены для конкретной таблицы при предоставлении запроса. Список связанных таблиц, переданных этому методу, должен быть предварительно установлен в качестве ассоциаций с помощью API таблицы.
Returns
arraygetMatching() public
getMatching(): array
Возвращает текущее дерево ассоциаций для сопоставления.
Returns
arrayisAutoFieldsEnabled() public
isAutoFieldsEnabled(): bool
Получает, будут ли содержащиеся ассоциации автоматически загружать поля.
Returns
boolloadExternal() public
loadExternal(Cake\ORM\Query $query, Cake\Database\StatementInterface $statement): Cake\Database\StatementInterface
Декорирует переданный объект инструкции, чтобы вставить данные из ассоциаций, которые не могут быть напрямую объединены.
Parameters
-
Cake\ORM\Query$query Запрос, для которого необходимо нетерпеливо загрузить внешние ассоциации
-
Cake\Database\StatementInterface$statement Инструкция, созданная после выполнения $query
Returns
Cake\Database\StatementInterfaceThrows
RuntimeExceptionnormalized() public
normalized(Cake\ORM\Table $repository): array
Возвращает полностью нормализованный массив ассоциаций, которые должны быть нетерпеливо загружены для таблицы. Нормализованный массив перестроит исходный массив, сортируя все ассоциации под одним ключом, а специальные параметры - под другим.
Каждый из уровней дерева ассоциаций будет преобразован в объект {@link \Cake\ORM\EagerLoadable}, который содержит всю информацию, необходимую для объектов ассоциации для загрузки информации из базы данных.
Кроме того, он установит ключ «экземпляр» для каждой ассоциации, содержащий экземпляр ассоциации из соответствующей исходной таблицы
Parameters
-
Cake\ORM\Table$repository Таблица, содержащая ассоциацию, которая будет нормализована
Returns
arraysetMatching() public
setMatching(string $associationPath, callable|null $builder = null, array<string, mixed> $options = []): $this
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь ассоциаций, разделенный точками, этому методу в качестве его первого параметра, это приведет к установке всех этих ассоциаций с параметром matching.
Options
-
joinType: INNER, OUTER, ...-
fields: Поля для включения -
negateMatch: Необходимо ли добавить условия, чтобы отрицать соответствие целевой ассоциации
-
Parameters
-
string$associationPath Путь ассоциации, разделенный точками, 'Name1.Name2.Name3'
-
callable|null$builder optional Функция обратного вызова, которая будет использоваться для установки дополнительных параметров для запроса фильтрации
-
array<string, mixed>$options optional Дополнительные параметры для сопоставления ассоциаций.
Returns
$thisКраткое описание полей
$_aliasList protected
Содержит список имен ассоциаций, которые должны быть нетерпеливо загружены
Type
array$_autoFields protected
Управляет тем, будут ли поля из связанных таблиц нетерпеливо загружены. Если установлено значение false, поля из ассоциаций загружаться не будут.
Type
bool$_containOptions protected
Список параметров, принимаемых ассоциациями в contain(), индексированных по ключу для более быстрого доступа
Type
array<string, int>$_containments protected
Вложенный массив, описывающий ассоциацию, которая должна быть получена, и параметры, которые необходимо применить для каждой из них, если таковые имеются
Type
array<string, mixed>$_joinsMap protected
Карта псевдонимов таблиц, указывающая на объекты ассоциации, которые они представляют для запроса.
Type
array$_loadExternal protected
Список ассоциаций, которые должны быть загружены с помощью отдельного запроса
Type
arrayCake\ORM\EagerLoadable>$_matching protected
Другой экземпляр EagerLoader, который будет использоваться для ассоциаций «сопоставления».
Type
Cake\ORM\EagerLoader|null$_normalized protected
Содержит вложенный массив с скомпилированным деревом содержащихся элементов. Это нормализованная версия массива содержащихся элементов, предоставленного пользователем.
Type
Cake\ORM\EagerLoadable|arrayCake\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/4.3/class-Cake.ORM.EagerLoader.html