Класс 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
Возвращает массив, в качестве ключей которого используется пунктирная цепочка ассоциаций, участвующих в этом eager loader. Значения массива будут содержать следующие ключи
- attachAssociations() public
Изменяет переданный запрос, чтобы применить объединения или другие преобразования, необходимые для жадной загрузки ассоциаций, описанных в массиве
contain. Этот метод не будет изменять запрос для загрузки внешних ассоциаций, то есть тех, которые не могут быть загружены без выполнения отдельного запроса. - attachableAssociations() public
Возвращает массив с ассоциациями, которые могут быть получены с помощью одного запроса, ключи массива являются псевдонимами ассоциаций, а значения будут содержать массив объектов Cake\ORM\EagerLoadable.
- Устанавливает/получает, будут ли поля содержащихся ассоциаций загружаться автоматически.
- clearContain() publicУдаляет все существующие несопоставляемые содержащиеся элементы.
- contain() public
Устанавливает список ассоциаций, которые должны быть загружены с жадностью вместе для определённой таблицы, когда предоставляется запрос. Список связанных таблиц, переданных в этот метод, должен был быть ранее установлен как ассоциации с использованием API таблиц.
- disableAutoFields() publicОтключает автоматическую загрузку полей содержащихся ассоциаций.
- 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 eager loader тоже.
_buildAssociationsMap()source protected
_buildAssociationsMap( array $map , array $level , boolean $matching = false )
Внутренний метод для построения карты, которая используется для значения возврата метода associationsMap().
Параметры
- массив
$map - Начальный массив для карты.
- массив
$level - Массив экземпляров EagerLoadable.
- boolean
$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: Стратегия загрузки (соединение, выборка, подзапрос)
Параметры
- array|string
$associationsнеобязательно [] Список псевдонимов таблиц, которые нужно запросить. При вызове этого метода несколько раз предыдущий список будет объединен с новым.
- callable
$queryBuilderнеобязательно null - Вызываемый объект для построения запроса
Возвращает
arrayСодержимое.
Выбрасывает
InvalidArgumentExceptionПри использовании $queryBuilder с массивом $associations
disableAutoFields()source public
disableAutoFields( )
Отключает автоматическую загрузку полей связанных ассоциаций.
Возвращает
$this
enableAutoFields()source public
enableAutoFields( boolean $enable = true )
Устанавливает, загружать ли поля связанных ассоциаций автоматически.
Параметры
- boolean
$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 таблицы.
Возвращает
arrayСодержимое.
getMatching()source public
getMatching( )
Возвращает текущее дерево ассоциаций, подлежащих сопоставлению.
Возвращает
arrayРезультат массива содержаний
isAutoFieldsEnabled()source public
isAutoFieldsEnabled( )
Получает, загружаются ли поля связанных ассоциаций автоматически.
Возвращает
booleanТекущее значение.
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() вместо этого.Параметры
- string|null
$assocнеобязательно null - Одна ассоциация или путь к ассоциациям, разделенный точкой.
- callable
$builderнеобязательно null Функция обратного вызова, используемая для установки дополнительных параметров в запрос фильтрации
- array
$optionsнеобязательно [] Дополнительные параметры для сопоставления ассоциации, такие как 'joinType' и 'fields'
Возвращает
arrayРезультат массива содержаний
normalized()source public
normalized( Cake\ORM\Table $repository )
Возвращает полностью нормализованный массив ассоциаций, которые должны быть загружены вместе с таблицей. Нормализованный массив перестроит исходный массив, отсортировав все ассоциации под одним ключом и специальные параметры под другим.
Каждый уровень дерева ассоциаций преобразуется в объект Cake\ORM\EagerLoadable, содержащий всю информацию, необходимую для загрузки данных из базы данных.
Кроме того, он установит ключ 'instance' для каждой ассоциации, содержащий экземпляр ассоциации из соответствующей исходной таблицы
Параметры
-
Cake\ORM\Table$repository Таблица, содержащая ассоциацию, которая будет нормализована
Возвращает
arraysetMatching()source public
setMatching( string $assoc , callable $builder = null , array $options = [] )
Добавляет новую ассоциацию в список, который будет использоваться для фильтрации результатов любого заданного запроса на основе результатов поиска записей для этой ассоциации. Вы можете передать путь к ассоциациям, разделенный точкой, в этот метод в качестве первого параметра, это приведет к настройке всех этих ассоциаций с параметром matching .
Параметры
- 'joinType': INNER, OUTER, ...
- 'fields': Поля для включения
Параметры
- string
$assoc - Одна ассоциация или путь к ассоциациям, разделенный точкой.
- callable
$builderнеобязательно null Функция обратного вызова, используемая для установки дополнительных параметров в запрос фильтрации
- array
$optionsнеобязательно [] - Дополнительные параметры для сопоставления ассоциации.
Возвращает
$this
Подробности свойств
$_aliasListsource
protected array
Содержит список имён ассоциаций, которые нужно загрузить вместе с данными
[]
$_autoFieldssource
protected boolean
Управляет тем, будут ли загружаться поля из связанных таблиц вместе с данными. При установке в 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 массив
Карта псевдонимов таблиц, указывающая на объекты ассоциаций, которые они представляют для запроса.
[]
$_loadExternalsource
protected Cake\ORM\EagerLoadable[]
Список ассоциаций, которые должны быть загружены с помощью отдельного запроса
[]
$_matchingsource
protected Cake\ORM\EagerLoader
Другой экземпляр EagerLoader, который будет использоваться для ассоциаций 'matching'.
$_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.8/class-Cake.ORM.EagerLoader.html