类 SelectLoader
使用 SELECT 查询加载关联的逻辑实现
属性概述
-
$alias protected
string
加载结果的关联别名
-
$associationType protected
string
触发加载的关联类型
-
$bindingKey protected
array|string
源关联的绑定键。
-
$finder protected
callable
一个可调用函数,将返回一个用于加载关联结果的查询对象
-
$foreignKey protected
array|string
指向目标关联的外键
-
$sort protected
Cake\Database\ExpressionInterfaceClosure|array|string|null
加载关联的排序选项
-
$sourceAlias protected
string
源关联的别名
-
$strategy protected
string
用于加载的策略,选择或子查询
-
$targetAlias protected
string
目标关联的别名
方法概述
-
__construct() public
将选项数组复制到此类中的属性。数组中的键对应于此类中的属性。
-
_addFilteringCondition() protected
在给定过滤器键和一些过滤值的情况下,将目标表查询中加载相关记录集所需的任何条件附加到目标表查询中。
-
_addFilteringJoin() protected
在给定过滤器键和一些过滤值的情况下,将目标表查询中加载相关记录集所需的任何条件附加到目标表查询中,其中过滤需要使用子查询来完成。
-
_assertFieldsPresent() protected
检查提取查询是否具有自动字段或已选择外键字段。如果缺少必需的字段,则抛出异常。
-
_buildQuery() protected
辅助函数,用于构造一个新的查询对象,以返回目标表中与源表中 $options 中指定的那些关联的所有记录
-
_buildResultMap() protected
构建一个包含 fetchQuery 中结果的数组,并根据与该关联相对应的外键值进行索引。
-
_buildSubquery() protected
构建一个查询,用作过滤目标表中记录的条件,它是通过克隆用于加载源表中记录的原始查询来构建的。
-
_createTupleCondition() protected
返回一个 TupleComparison 对象,该对象可用于使用提供的运算符将 $keys 中的所有字段与 $filter 中的元组值进行匹配。
-
_defaultOptions() protected
返回用于 eagerLoader 的默认选项
-
_extractFinder() protected
辅助方法,用于推断请求的查找器及其选项。
-
_linkField() protected
生成一个字符串,用作包含应应用过滤器的值的表字段
-
_multiKeysInjector() protected
返回一个可调用函数,用于查询结果集中的每一行,用于在匹配需要使用多个外键进行时注入预加载的行
-
_resultInjector() protected
返回一个可调用函数,用于查询结果集中的每一行,用于注入预加载的行
-
_subqueryFields() protected
计算需要参与子查询的字段。
-
buildEagerLoader() public
返回一个可调用函数,可用于将关联结果注入给定的迭代器。此方法接受的选项与
Association::eagerLoader()
相同
方法详情
__construct() ¶ public
__construct(array<string, mixed> $options)
将选项数组复制到此类中的属性。数组中的键对应于此类中的属性。
参数
-
array<string, mixed>
$options 要复制到此类的属性
_addFilteringCondition() ¶ protected
_addFilteringCondition(Cake\ORM\Query\SelectQuery $query, list<string>|string $key, mixed $filter): Cake\ORM\Query\SelectQuery
在给定过滤器键和一些过滤值的情况下,将目标表查询中加载相关记录集所需的任何条件附加到目标表查询中。
参数
-
Cake\ORM\Query\SelectQuery
$query 目标表的查询
-
list<string>|string
$key 应用于过滤的字段
-
mixed
$filter 应用于匹配 $key 的值
返回值
Cake\ORM\Query\SelectQuery
_addFilteringJoin() ¶ protected
_addFilteringJoin(Cake\ORM\Query\SelectQuery $query, list<string>|string $key, Cake\ORM\Query\SelectQuery $subquery): Cake\ORM\Query\SelectQuery
在给定过滤器键和一些过滤值的情况下,将目标表查询中加载相关记录集所需的任何条件附加到目标表查询中,其中过滤需要使用子查询来完成。
参数
-
Cake\ORM\Query\SelectQuery
$query 目标表的查询
-
list<string>|string
$key 应用于过滤的字段
-
Cake\ORM\Query\SelectQuery
$subquery 用于过滤的子查询
返回值
Cake\ORM\Query\SelectQuery
_assertFieldsPresent() ¶ protected
_assertFieldsPresent(Cake\ORM\Query\SelectQuery $fetchQuery, list<string> $key): void
检查提取查询是否具有自动字段或已选择外键字段。如果缺少必需的字段,则抛出异常。
参数
-
Cake\ORM\Query\SelectQuery
$fetchQuery 关联提取查询
-
list<string>
$key 要检查的外键字段
返回值
void
抛出
InvalidArgumentException
_buildQuery() ¶ protected
_buildQuery(array<string, mixed> $options): Cake\ORM\Query\SelectQuery
辅助函数,用于构造一个新的查询对象,以返回目标表中与源表中 $options 中指定的那些关联的所有记录
参数
-
array<string, mixed>
$options eagerLoader() 接受的选项
返回值
Cake\ORM\Query\SelectQuery
抛出
InvalidArgumentException
当关联需要一个键但未选择时。
_buildResultMap() ¶ protected
_buildResultMap(Cake\ORM\Query\SelectQuery $fetchQuery, array<string, mixed> $options): array<string, mixed>
构建一个包含 fetchQuery 中结果的数组,并根据与该关联相对应的外键值进行索引。
参数
-
Cake\ORM\Query\SelectQuery
$fetchQuery 用于获取结果的查询
-
array<string, mixed>
$options 传递给 eager loader 的选项
返回值
array<string, mixed>
_buildSubquery() ¶ protected
_buildSubquery(Cake\ORM\Query\SelectQuery $query): Cake\ORM\Query\SelectQuery
构建一个查询,用作过滤目标表中记录的条件,它是通过克隆用于加载源表中记录的原始查询来构建的。
参数
-
Cake\ORM\Query\SelectQuery
$query 用于加载源记录的原始查询
返回值
Cake\ORM\Query\SelectQuery
_createTupleCondition() ¶ protected
_createTupleCondition(Cake\ORM\Query\SelectQuery $query, list<string> $keys, mixed $filter, string $operator): Cake\Database\Expression\TupleComparison
返回一个 TupleComparison 对象,该对象可用于使用提供的运算符将 $keys 中的所有字段与 $filter 中的元组值进行匹配。
参数
-
Cake\ORM\Query\SelectQuery
$query 目标表的查询
-
list<string>
$keys 应用于过滤的字段
-
mixed
$filter 应用于匹配 $key 的值
-
string
$operator 用于比较元组的运算符
返回值
Cake\Database\Expression\TupleComparison
_defaultOptions() ¶ protected
_defaultOptions(): array<string, mixed>
返回用于 eagerLoader 的默认选项
返回值
array<string, mixed>
_extractFinder() ¶ protected
_extractFinder(array|string $finderData): array
辅助方法,用于推断请求的查找器及其选项。
返回从查找器 $type 推断的选项。
示例
以下代码将使用查找器作为选项调用查找器 'translations':$query->contain(['Comments' => ['finder' => ['translations']]]); $query->contain(['Comments' => ['finder' => ['translations' => []]]]); $query->contain(['Comments' => ['finder' => ['translations' => ['locales' => ['en_US']]]]]);
参数
-
array|string
$finderData 查找器名称或一个包含名称作为键,选项作为值的数组。
返回值
array
_linkField() ¶ protected
_linkField(array<string, mixed> $options): list<string>|string
生成一个字符串,用作包含应应用过滤器的值的表字段
参数
-
array<string, mixed>
$options 获取链接字段的选项。
返回值
list<string>|string
抛出
Cake\Database\Exception\DatabaseException
_multiKeysInjector() ¶ protected
_multiKeysInjector(array<string, mixed> $resultMap, list<string> $sourceKeys, string $nestKey): Closure
返回一个可调用函数,用于查询结果集中的每一行,用于在匹配需要使用多个外键进行时注入预加载的行
参数
-
array<string, mixed>
$resultMap 包含目标表的键值数组。
-
list<string>
$sourceKeys 一个包含别名键的数组,用于匹配。
-
string
$nestKey 结果应该嵌套的键名。
返回值
Closure
_resultInjector() ¶ protected
_resultInjector(Cake\ORM\Query\SelectQuery $fetchQuery, array<string, mixed> $resultMap, array<string, mixed> $options): Closure
返回一个可调用函数,用于查询结果集中的每一行,用于注入预加载的行
参数
-
Cake\ORM\Query\SelectQuery
$fetchQuery 用于获取结果的查询。
-
array<string, mixed>
$resultMap 一个以外键为键,对应目标表结果为值的数组。
-
array<string, mixed>
$options 传递给 eagerLoader 方法的选项。
返回值
Closure
_subqueryFields() ¶ protected
_subqueryFields(Cake\ORM\Query\SelectQuery $query): array<string, array>
计算需要参与子查询的字段。
通常这包括绑定键列。如果存在 ORDER BY,这些列也会包含在内,因为这些列可能是计算或常数值,需要存在才能确保加载正确的关联数据。
参数
-
Cake\ORM\Query\SelectQuery
$query 获取字段的查询。
返回值
array<string, array>
buildEagerLoader() ¶ public
buildEagerLoader(array<string, mixed> $options): Closure
返回一个可调用函数,可用于将关联结果注入给定的迭代器。此方法接受的选项与 Association::eagerLoader()
相同
参数
-
array<string, mixed>
$options 与
Association::eagerLoader()
相同的选项。
返回值
Closure