类 EagerLoader
公开用于存储在提供查询后应为表格进行预加载关联的方法,并委托创建所需联接和装饰结果的任务,以便这些关联可以成为结果集的一部分。
属性摘要
-
$_aliasList protected
array
包含要预加载的关联名称列表。
-
$_autoFields protected
bool
控制是否会预加载关联表格的字段。当设置为 false 时,不会从关联加载任何字段。
-
$_containOptions protected
array<string, int>
关联在 contain() 中接受的选项列表,按键索引以便更快地访问。
-
$_containments protected
array<string, mixed>
描述要获取的关联以及要对每个关联应用的选项(如果有)的嵌套数组。
-
$_joinsMap protected
array<string,Cake\ORM\EagerLoadable>
指向表别名与其代表的关联对象的映射,用于查询。
-
$_loadExternal protected
arrayCake\ORM\EagerLoadable>
应通过单独的查询加载的关联列表。
-
$_matching protected
Cake\ORM\EagerLoader|null
另一个 EagerLoader 实例,将用于“匹配”关联。
-
$_normalized protected
Cake\ORM\EagerLoadable|arrayCake\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 对象的数组。
-
clearContain() public
删除任何现有的非匹配包含。
-
contain() public
设置应在提供查询时为特定表格预加载的关联列表。传递给此方法的关联表格列表必须已使用表格 API 作为关联预先设置。
-
disableAutoFields() public
禁用自动加载包含关联的字段。
-
enableAutoFields() public
设置包含的关联是否会自动加载字段。
-
externalAssociations() public
返回一个数组,其中包含需要使用单独的查询获取的关联,每个数组值将包含一个 {@link \Cake\ORM\EagerLoadable} 对象。
-
getContain() public
获取应在提供查询时为特定表格预加载的关联列表。传递给此方法的关联表格列表必须已使用表格 API 作为关联预先设置。
-
getMatching() public
返回要匹配的关联的当前树。
-
isAutoFieldsEnabled() public
获取包含的关联是否会自动加载字段。
-
loadExternal() public
注入来自无法直接联接的关联的数据。
-
normalized() public
返回应为表格预加载的关联的完全标准化数组。标准化数组将通过将所有关联排序在一个键下并将特殊选项排序在另一个键下来重新组织原始数组。
-
setMatching() public
将新的关联添加到列表中,该列表将用于基于为该关联查找记录的结果来过滤任何给定查询的结果。您可以将关联的点分路径作为第一个参数传递给此方法,这将转化为使用
matching
选项设置所有这些关联。
方法详细说明
_buildAssociationsMap() ¶ protected
_buildAssociationsMap(array $map, arrayCake\ORM\EagerLoadable> $level, bool $matching = false): array
构建用于 associationsMap() 方法返回值的映射的内部方法。
参数
-
array
$map 映射的初始数组。
-
arrayCake\ORM\EagerLoadable>
$level EagerLoadable 实例数组。
-
bool
$matching optional 是否是通过
matching()
加载的关联。
返回值
array
_collectKeys() ¶ protected
_collectKeys(arrayCake\ORM\EagerLoadable> $external, Cake\ORM\Query\SelectQuery $query, array $results): array
用于返回将用于预加载关联的查询记录中的键的辅助函数。
参数
-
arrayCake\ORM\EagerLoadable>
$external 要加载的外部关联列表。
-
Cake\ORM\Query\SelectQuery
$query 生成结果的查询。
-
array
$results 结果数组。
返回值
array
_correctStrategy() ¶ protected
_correctStrategy(Cake\ORM\EagerLoadable $loadable): void
如果由于在同一直接关联链下出现重复而需要,则更改关联获取策略。
参数
-
Cake\ORM\EagerLoadable
$loadable 关联配置。
返回值
void
_fixStrategies() ¶ protected
_fixStrategies(): void
遍历可联接的别名列表,并更正获取策略,以避免在生成的查询中出现别名冲突。
此函数操作由 _normalizeContain() 函数生成的数组引用。
返回值
void
_groupKeys() ¶ protected
_groupKeys(array $results, array<string, array> $collectKeys): array
辅助函数,用于遍历语句并提取在 $collectKeys 中定义的列。
参数
-
array
$results 结果数组。
-
array<string, array>
$collectKeys 要收集的键。
返回值
array
_normalizeContain() ¶ protected
_normalizeContain(Cake\ORM\Table $parent, string $alias, array<string, mixed> $options, array<string, mixed> $paths): Cake\ORM\EagerLoadable
辅助函数,负责完全标准化使用 contain()
定义的深度关联。
参数
-
Cake\ORM\Table
$parent 关联的拥有方。
-
string
$alias 要加载的关联的名称。
-
array<string, mixed>
$options 用于此关联的额外选项列表。
-
array<string, mixed>
$paths 包含两个值的数组,第一个值是表示关联的点分隔字符串列表,这些字符串导致关联链中的此
$alias
被加载。第二个值是要遵循的实体属性路径,以获取相应关联的记录。
返回值
Cake\ORM\EagerLoadable
抛出
InvalidArgumentException
当包含引用不存在的关联时。
_reformatContain() ¶ protected
_reformatContain(array $associations, array $original): array
格式化包含数组,以便关联始终在数组中作为键设置。此函数将原始关联数组与提供的新的关联合并。
参数
-
array
$associations 用户提供的包含数组。
-
array
$original 要与新包含数组合并的原始包含数组。
返回值
array
_resolveJoins() ¶ protected
_resolveJoins(arrayCake\ORM\EagerLoadable> $associations, arrayCake\ORM\EagerLoadable> $matching = []): arrayCake\ORM\EagerLoadable>
辅助函数,用于编译所有可以在查询中联接的关联列表。
参数
-
arrayCake\ORM\EagerLoadable>
$associations 要从中获取连接的关联列表。
-
arrayCake\ORM\EagerLoadable>
$matching optional 应该强制连接的关联列表。
返回值
arrayCake\ORM\EagerLoadable>
addToJoinsMap() ¶ public
addToJoinsMap(string $alias, Cake\ORM\Association $assoc, bool $asMatching = false, string|null $targetProperty = null): void
将通常在查询中作为联接加载的表别名注册为属于关联。这有助于注水器了解如何处理来自此类联接表格的列。
参数
-
string
$alias 表别名,如查询中所示。
-
Cake\ORM\Association
$assoc 别名表示的关联对象;将被规范化。
-
bool
$asMatching optional 此连接结果是否应被视为“匹配”关联。
-
string|null
$targetProperty optional 连接结果应嵌套在其中的属性名称。如果未传递,将使用关联的默认属性。
返回值
void
associationsMap() ¶ public
associationsMap(Cake\ORM\Table $table): array
返回一个数组,其键是参与此预加载器的关联的点分路径。数组的值将包含以下键
alias
: 关联别名instance
: 关联实例canBeJoined
: 关联是否将使用 JOIN 加载entityClass
: 用于水化结果的实体nestKey
: 可用于将数据正确插入结果的点分隔路径。matching
: 它是否是通过matching()
加载的关联。
参数
-
Cake\ORM\Table
$table 包含将被规范化的关联的表。
返回值
array
attachAssociations() ¶ public
attachAssociations(Cake\ORM\Query\SelectQuery $query, Cake\ORM\Table $repository, bool $includeFields): void
修改传递的查询以应用联接或任何其他需要转换以预加载 contain
数组中描述的关联。此方法不会修改查询以加载外部关联,即那些不能在不执行单独查询的情况下加载的关联。
参数
-
Cake\ORM\Query\SelectQuery
$query 要修改的查询。
-
Cake\ORM\Table
$repository 包含关联的存储库
-
bool
$includeFields 是否将关联的所有字段追加到传递的查询。这可以根据包含数组中每个关联定义的设置进行覆盖。
返回值
void
attachableAssociations() ¶ public
attachableAssociations(Cake\ORM\Table $repository): arrayCake\ORM\EagerLoadable>
返回一个数组,其中包含可以使用单个查询获取的关联,数组键是关联别名,值将包含一个包含 Cake\ORM\EagerLoadable 对象的数组。
参数
-
Cake\ORM\Table
$repository 包含要附加的关联的表。
返回值
arrayCake\ORM\EagerLoadable>
clearContain() ¶ public
clearContain(): void
删除任何现有的非匹配包含。
这将重置/清除所有未通过 matching() 添加的包含关联。
返回值
void
contain() ¶ public
contain(array|string $associations, Closure|null $queryBuilder = null): array
设置应在提供查询时为特定表格预加载的关联列表。传递给此方法的关联表格列表必须已使用表格 API 作为关联预先设置。
关联可以使用点表示法或嵌套数组任意嵌套,这允许此对象计算连接或必须执行的任何其他查询以获取所需的关联数据。
每个传递的关联接受的选项
foreignKey
: 用于设置不同的字段以匹配两个表,如果设置为 false,则不会自动生成任何连接条件fields
: 包含应从关联中获取的字段的数组queryBuilder
: 等效于传递回调而不是选项数组matching
: 是否通知关联类它应该通过该类获取的结果来过滤主查询。joinType
: 对于可连接的关联,要使用的 SQL 连接类型。strategy
: 要使用的加载策略(连接、选择、子查询)
参数
-
array|string
$associations 要查询的表别名列表。当此方法多次调用时,它将合并以前的列表和新的列表。
-
Closure|null
$queryBuilder optional 查询生成器回调。
返回值
array
抛出
InvalidArgumentException
当使用 $queryBuilder 和 $associations 数组时
enableAutoFields() ¶ public
enableAutoFields(bool $enable = true): $this
设置包含的关联是否会自动加载字段。
参数
-
bool
$enable optional 要设置的值。
返回值
$this
externalAssociations() ¶ public
externalAssociations(Cake\ORM\Table $repository): arrayCake\ORM\EagerLoadable>
返回一个数组,其中包含需要使用单独的查询获取的关联,每个数组值将包含一个 {@link \Cake\ORM\EagerLoadable} 对象。
参数
-
Cake\ORM\Table
$repository 包含要加载的关联的表。
返回值
arrayCake\ORM\EagerLoadable>
getContain() ¶ public
getContain(): array
获取应在提供查询时为特定表格预加载的关联列表。传递给此方法的关联表格列表必须已使用表格 API 作为关联预先设置。
返回值
array
loadExternal() ¶ public
loadExternal(Cake\ORM\Query\SelectQuery $query, iterable $results): iterable
注入来自无法直接联接的关联的数据。
参数
-
Cake\ORM\Query\SelectQuery
$query 要为其热加载外部关联的查询。
-
iterable
$results 结果。
返回值
可迭代
抛出
RuntimeException
normalized() ¶ public
normalized(Cake\ORM\Table $repository): array
返回应为表格预加载的关联的完全标准化数组。标准化数组将通过将所有关联排序在一个键下并将特殊选项排序在另一个键下来重新组织原始数组。
关联树的每个级别都将转换为一个 {@link \Cake\ORM\EagerLoadable} 对象,其中包含关联对象从数据库加载信息所需的所有信息。
此外,它将为每个关联设置一个“instance”键,其中包含来自相应源表的关联实例
参数
-
Cake\ORM\Table
$repository 包含将被规范化的关联的表。
返回值
array
setMatching() ¶ public
setMatching(string $associationPath, Closure|null $builder = null, array<string, mixed> $options = []): $this
将新的关联添加到列表中,该列表将用于基于为该关联查找记录的结果来过滤任何给定查询的结果。您可以将关联的点分路径作为第一个参数传递给此方法,这将转化为使用 matching
选项设置所有这些关联。
选项
joinType
: INNER、OUTER、...fields
: 要包含的字段negateMatch
: 是否在目标关联上添加条件否定匹配
参数
-
string
$associationPath 点分隔关联路径,“Name1.Name2.Name3”。
-
Closure|null
$builder optional 用于设置过滤查询的额外选项的回调函数。
-
array<string, mixed>
$options optional 关联匹配的额外选项。
返回值
$this
属性详细说明
$_normalized ¶ protected
包含一个嵌套数组,其中包含已编译的包含树。这是用户提供的包含数组的标准化版本。
类型
Cake\ORM\EagerLoadable|arrayCake\ORM\EagerLoadable>|null