类 HasMany
表示 N - 1 关系,其中关系的目标端将为源端中的每个记录拥有一个或多个记录。
HasMany 关联的一个示例是 Author 拥有多个 Articles。
常量
-
string
MANY_TO_MANY ¶'manyToMany'
多对多关联的关联类型。
-
string
MANY_TO_ONE ¶'manyToOne'
多对一关联的关联类型。
-
string
ONE_TO_MANY ¶'oneToMany'
一对多关联的关联类型。
-
string
ONE_TO_ONE ¶'oneToOne'
一对一关联的关联类型。
-
string
SAVE_APPEND ¶'append'
保存策略,只将数据追加到链接集中。
-
string
SAVE_REPLACE ¶'replace'
保存策略,将链接集替换为提供的数据集。
-
string
STRATEGY_JOIN ¶'join'
用于获取关联记录的联接策略名称。
-
string
STRATEGY_SELECT ¶'select'
用于获取关联记录的选择策略名称。
-
string
STRATEGY_SUBQUERY ¶'subquery'
用于获取关联记录的子查询策略名称。
属性摘要
-
$_bindingKey protected
list<string>|string
拥有方表中用于与 foreignKey 匹配的字段名称。
-
$_cascadeCallbacks protected
bool
级联删除是否也应该触发回调。
-
$_className protected
string
目标表对象的类名称。
-
$_conditions protected
Closure|array
从目标关联获取记录时始终包含的条件列表。
-
$_dependent protected
bool
目标表上的记录是否依赖于源表,通常用于指示如果源表中拥有方记录被删除,则应删除记录。
-
$_finder protected
array|string
用于从目标表获取行的默认查找器名称。 数组值允许查找器名称和默认选项。
-
$_foreignKey protected
list<string>|string|false
代表要加载的表的外部键的字段名称。
-
$_joinType protected
string
将关联添加到查询时使用的联接类型。
-
$_name protected
string
赋予关联的名称,它通常表示分配给目标关联表的别名。
-
$_propertyName protected
string
应该用目标表中的数据填充源表记录中的属性名称。
-
$_saveStrategy protected
string
此关联使用的保存策略。
-
$_sort protected
Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string|null
应返回目标记录的顺序。
-
$_sourceTable protected
Cake\ORM\Table
源表实例。
-
$_strategy protected
string
用于获取关联记录的策略名称。
-
$_tableLocator protected
Cake\ORM\Locator\LocatorInterface|null
表定位器实例。
-
$_targetTable protected
Cake\ORM\Table
目标表实例。
-
$_validStrategies protected
list<string>
此类型关联的有效策略。
-
$defaultTable protected
string|null
此对象的默认表别名。
方法摘要
-
__call() public
将方法调用代理到目标表。
-
__construct() public
构造函数。 子类可以覆盖 _options 函数以获取传递选项的原始列表(如果期望任何其他特殊键)。
-
__get() public
将属性检索代理到目标表。 这对于获取此关联的关联很有用。
-
__isset() public
将 isset 调用代理到目标表。 这对于检查目标表是否与传递的名称具有另一个关联很有用。
-
_appendFields() protected
辅助函数,用于有条件地将字段附加到查询的 select 子句中,这些字段来自另一个查询对象中找到的字段。
-
_appendNotMatching() protected
有条件地向传递的 Query 添加一个条件,这将使它找到与该关联没有匹配项的记录。
-
_bindNewAssociations() protected
将所有可附加关联应用于
$query
,这些关联来自$surrogate
查询中找到的 containment。 -
_camelize() protected
创建 $name 的骆驼命名版本。
-
_dispatchBeforeFind() protected
为此关联附加到的查询触发目标表上的 beforeFind。
-
_entityName() protected
为指定的名称创建适当的实体名称(单数)。
-
_extractFinder() protected
辅助方法,用于推断请求的查找器及其选项。
-
_fixtureName() protected
创建装配名称。
-
_foreignKeyAcceptsNull() protected
检查外部键的可空标志。
-
_formatAssociationResults() protected
如果
$surrogate
查询声明了任何其他格式化程序,则将格式化程序函数添加到传递的$query
中。 由于$surrogate
查询对应于关联的目标表,因此结果格式化程序将是将代理格式化程序应用于仅对应于该表的属性的结果。 -
_joinCondition() protected
返回要附加到生成的联接子句以获取目标表上的结果的单个或多个条件。
-
_modelKey() protected
为关联创建适当的下划线模型键
-
_modelNameFromKey() 受保护
从外键创建正确的模型名称
-
_options() 受保护
解析构造函数中传递的额外选项。
-
_pluginNamespace() 受保护
返回插件的命名空间
-
_pluginPath() 受保护
查找插件的正确路径。扫描 $pluginPaths 以查找您想要的插件。
-
_pluralHumanName() 受保护
创建视图中使用的复数人名
-
_propertyName() 受保护
返回基于关联名称的默认属性名称。
-
_saveTarget() 受保护
将每个实体持久化到目标表中,并在父实体和每个保存的目标实体之间创建链接。
-
_singularHumanName() 受保护
创建视图中使用的单数人名
-
_singularName() 受保护
创建用于视图的单数名称。
-
_unlink() 受保护
删除/设置与 $conditions 匹配的相关对象的空值。
-
_unlinkAssociated() 受保护
根据源和目标之间的依赖关系以及外键可空性删除/设置相关对象的空值。跳过删除 $remainingEntities 中存在的记录
-
_variableName() 受保护
创建视图的复数变量名
-
attachTo() 公共
更改查询对象以在最终结果中包含关联的目标表数据
-
canBeJoined() 公共
此关联是否可以直接在查询联接中表达
-
cascadeDelete() 公共
处理从关联模型级联删除。
-
defaultRowValue() 公共
在为该关联附加一个具有默认空值的属性后返回修改后的行,该属性根据关联是外部联接还是外部获取来确定。
-
deleteAll() 公共
将删除操作代理到目标
Table::deleteAll()
方法 -
eagerLoader() 公共
急切地加载目标表中与源表中的另一组记录相关的记录列表。源记录可以通过两种方式指定:第一种是通过传递一个在源表上查找的查询对象,另一种是通过显式传递源表中的主键值数组。
-
exists() 公共
在附加此关联的默认条件后,将操作代理到目标表的 exists 方法
-
fetchTable() 公共
获取表实例的便捷方法。
-
find() 公共
将查找操作代理到目标表的 find 方法,并根据此关联配置相应地修改查询
-
getBindingKey() 公共
获取表示与目标表绑定字段的字段的名称。如果没有手动指定,则使用拥有方表的主键。
-
getCascadeCallbacks() 公共
获取级联删除是否也应该触发回调。
-
getClassName() 公共
获取目标表对象的类名。
-
getConditions() 公共
获取从目标关联获取记录时始终包含的条件列表。
-
getDependent() 公共
设置目标表上的记录是否依赖于源表。
-
getFinder() 公共
获取用于从目标表获取行的默认查找器。
-
getForeignKey() 公共
获取表示到目标表的外键的字段的名称。
-
getJoinType() 公共
获取将关联添加到查询时使用的联接类型。
-
getName() 公共
获取此关联的名称,通常是分配给目标关联表的别名
-
getProperty() 公共
获取应使用目标表中的数据填充源表记录中的属性名称。
-
getSaveStrategy() 公共
获取应用于保存的策略。
-
getSort() 公共
获取应返回目标记录的排序顺序。
-
getSource() 公共
获取关联源端的表实例。
-
getStrategy() 公共
获取用于获取关联记录的策略名称。请记住,某些关联类型可能没有实现,而是一个默认策略,这将使对该设置的任何更改无效。
-
getTableLocator() 公共
获取表定位器。
-
getTarget() 公共
获取关联目标端的表实例。
-
isOwningSide() 公共
返回传递的表是否是此关联的拥有方。这意味着如果 'source' 中的行不存在,则 'target' 表中的行会丢失重要或必需的信息。
-
link() 公共
将源实体关联到提供的每个目标实体。使用此方法时,
$targetEntities
中的所有实体都将追加到源实体的对应于此关联对象的属性。 -
replace() 公共
用传递的实体替换源实体和目标之间现有的关联链接。此方法进行智能清理,已持久化并存在于
$targetEntities
中的链接不会被删除,将为传递的目标实体创建新的链接,这些实体尚未在数据库中,其余的将被删除。 -
requiresKeys() 公共
如果急切加载过程需要一组拥有表绑定的键才能用作查找器查询中的过滤器,则返回 true。
-
saveAssociated() 公共
从源表获取一个实体,并查找是否存在与该关联的属性名称匹配的字段。通过传递提供的
$options
,找到的实体将保存到该关联的目标表中 -
setBindingKey() 公共
设置表示与目标表绑定字段的字段的名称。如果没有手动指定,则使用拥有方表的主键。
-
setCascadeCallbacks() 公共
设置级联删除是否也应该触发回调。
-
setClassName() 公共
设置目标表对象的类名。
-
setConditions() 公共
设置从目标关联获取记录时始终包含的条件列表。
-
setDependent() 公共
设置目标表上的记录是否依赖于源表。
-
setFinder() 公共
设置用于从目标表获取行的默认查找器。
-
setForeignKey() 公共
设置表示到目标表的外键的字段的名称。
-
setJoinType() 公共
设置将关联添加到查询时使用的联接类型。
-
setProperty() 公共
设置应使用目标表中的数据填充源表记录中的属性名称。
-
setSaveStrategy() 公共
设置应用于保存的策略。
-
setSort() 公共
设置应返回目标记录的排序顺序。
-
setSource() 公共
设置关联源端的表实例。
-
setStrategy() 公共
设置用于获取关联记录的策略名称。请记住,某些关联类型可能没有实现,而是一个默认策略,这将使对该设置的任何更改无效。
-
setTableLocator() 公共
设置表定位器。
-
setTarget() 公共
设置关联目标端的表实例。
-
transformRow() 公共
将关联值的結果行正确嵌套到源结果中的正确数组键中。
-
type() 公共
获取关系类型。
-
unlink() 公共
删除传递的源实体与提供的每个目标实体之间的所有链接。此方法假设所有传递的对象都已持久化到数据库中,并且每个对象都包含一个主键值。
-
updateAll() 公共
将更新操作代理到目标
Table::updateAll()
方法
方法详情
__call() ¶ public
__call(string $method, array $argument): mixed
将方法调用代理到目标表。
参数
-
string
$method 要调用的方法名称
-
array
$argument 传递给函数的参数列表
返回值
mixed
抛出
BadMethodCallException
__construct() ¶ public
__construct(string $alias, array<string, mixed> $options = [])
构造函数。 子类可以覆盖 _options 函数以获取传递选项的原始列表(如果期望任何其他特殊键)。
参数
-
string
$alias 赋予关联的名称
-
array<string, mixed>
$options 可选 要在这个对象上设置的属性列表
__get() ¶ public
__get(string $property): self
将属性检索代理到目标表。 这对于获取此关联的关联很有用。
参数
-
string
$property 属性名称
返回值
self
抛出
RuntimeException
如果没有关联使用此名称存在
__isset() ¶ public
__isset(string $property): bool
将 isset 调用代理到目标表。 这对于检查目标表是否与传递的名称具有另一个关联很有用。
参数
-
string
$property 属性名称
返回值
bool
_appendFields() ¶ protected
_appendFields(Cake\ORM\Query\SelectQuery $query, Cake\ORM\Query\SelectQuery $surrogate, array<string, mixed> $options): void
辅助函数,用于有条件地将字段附加到查询的 select 子句中,这些字段来自另一个查询对象中找到的字段。
参数
-
Cake\ORM\Query\SelectQuery
$query 将要追加字段的查询
-
Cake\ORM\Query\SelectQuery
$surrogate 拥有要从其中复制的字段的查询
-
array<string, mixed>
$options 传递给
attachTo
方法的选项
返回值
void
_appendNotMatching() ¶ protected
_appendNotMatching(Cake\ORM\Query\SelectQuery $query, array<string, mixed> $options): void
有条件地向传递的 Query 添加一个条件,这将使它找到与该关联没有匹配项的记录。
参数
-
Cake\ORM\Query\SelectQuery
$query 要修改的查询
-
array<string, mixed>
$options 包含
negateMatch
键的选项数组。
返回值
void
_bindNewAssociations() ¶ protected
_bindNewAssociations(Cake\ORM\Query\SelectQuery $query, Cake\ORM\Query\SelectQuery $surrogate, array<string, mixed> $options): void
将所有可附加关联应用于 $query
,这些关联来自 $surrogate
查询中找到的 containment。
将 $surrogate
查询中包含的所有关联复制到传递的 $query
中。包含关系被更改,以便它们尊重关联链的来源。
参数
-
Cake\ORM\Query\SelectQuery
$query 将要附加关联的查询
-
Cake\ORM\Query\SelectQuery
$surrogate 拥有要附加的包含关系的查询
-
array<string, mixed>
$options 传递给
attachTo
方法的选项
返回值
void
_camelize() ¶ protected
_camelize(string $name): string
创建 $name 的骆驼命名版本。
参数
-
string
$name 名称
返回值
string
_dispatchBeforeFind() ¶ protected
_dispatchBeforeFind(Cake\ORM\Query\SelectQuery $query): void
为此关联附加到的查询触发目标表上的 beforeFind。
参数
-
Cake\ORM\Query\SelectQuery
$query 此关联正在附加到的查询
返回值
void
_entityName() ¶ protected
_entityName(string $name): string
为指定的名称创建适当的实体名称(单数)。
参数
-
string
$name 名称
返回值
string
_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
_fixtureName() ¶ protected
_fixtureName(string $name): string
创建装配名称。
参数
-
string
$name 模型类名称
返回值
string
_foreignKeyAcceptsNull() ¶ protected
_foreignKeyAcceptsNull(Cake\ORM\Table $table, array $properties): bool
检查外部键的可空标志。
参数
-
Cake\ORM\Table
$table 包含外键的表格
-
array
$properties 构成外键的字段列表
返回值
bool
_formatAssociationResults() ¶ protected
_formatAssociationResults(Cake\ORM\Query\SelectQuery $query, Cake\ORM\Query\SelectQuery $surrogate, array<string, mixed> $options): void
如果 $surrogate
查询声明了任何其他格式化程序,则将格式化程序函数添加到传递的 $query
中。 由于 $surrogate
查询对应于关联的目标表,因此结果格式化程序将是将代理格式化程序应用于仅对应于该表的属性的结果。
参数
-
Cake\ORM\Query\SelectQuery
$query 将要应用格式化程序的查询
-
Cake\ORM\Query\SelectQuery
$surrogate 拥有关联目标表格式化程序的查询。
-
array<string, mixed>
$options 传递给
attachTo
方法的选项
返回值
void
_joinCondition() ¶ protected
_joinCondition(array<string, mixed> $options): array
返回要附加到生成的联接子句以获取目标表上的结果的单个或多个条件。
参数
-
array<string, mixed>
$options 传递给 attachTo 方法的选项列表
返回值
array
抛出
Cake\Database\Exception\DatabaseException
如果外键中的列数与源表主键中的列数不匹配
_modelKey() ¶ protected
_modelKey(string $name): string
为关联创建适当的下划线模型键
如果输入包含一个点,则假设右侧是真正的表名称。
参数
-
string
$name 模型类名称
返回值
string
_modelNameFromKey() ¶ protected
_modelNameFromKey(string $key): string
从外键创建正确的模型名称
参数
-
string
$key 外键
返回值
string
_options() ¶ protected
_options(array<string, mixed> $options): void
解析构造函数中传递的额外选项。
参数
-
array<string, mixed>
$options 传递给构造函数的原始选项列表
返回值
void
_pluginNamespace() ¶ protected
_pluginNamespace(string $pluginName): string
返回插件的命名空间
参数
-
string
$pluginName 插件名称
返回值
string
_pluginPath() ¶ protected
_pluginPath(string $pluginName): string
查找插件的正确路径。扫描 $pluginPaths 以查找您想要的插件。
参数
-
string
$pluginName 要使用的插件名称,例如 DebugKit
返回值
string
_pluralHumanName() ¶ protected
_pluralHumanName(string $name): string
创建视图中使用的复数人名
参数
-
string
$name 控制器名称
返回值
string
_saveTarget() ¶ protected
_saveTarget(array $foreignKeyReference, Cake\Datasource\EntityInterface $parentEntity, array $entities, array<string, mixed> $options): bool
将每个实体持久化到目标表中,并在父实体和每个保存的目标实体之间创建链接。
参数
-
array
$foreignKeyReference 定义目标实体和父实体之间链接的外键引用。
-
Cake\Datasource\EntityInterface
$parentEntity 包含要保存的目标实体的源实体。
-
array
$entities 要持久化到目标表并链接到父实体的实体列表
-
array<string, mixed>
$options Table::save()
接受的选项列表。
返回值
bool
_singularHumanName() ¶ protected
_singularHumanName(string $name): string
创建视图中使用的单数人名
参数
-
string
$name 控制器名称
返回值
string
_singularName() ¶ protected
_singularName(string $name): string
创建用于视图的单数名称。
参数
-
string
$name 要使用的名称
返回值
string
_unlink() ¶ protected
_unlink(array $foreignKey, Cake\ORM\Table $target, array $conditions = [], array<string, mixed> $options = []): bool
删除/设置与 $conditions 匹配的相关对象的空值。
采取的行动取决于源和目标之间的依赖关系,以及外键的可空性。
参数
-
array
$foreignKey 外键属性数组
-
Cake\ORM\Table
$target 关联表
-
array
$conditions 可选 指定要解除链接的对象的条件
-
array<string, mixed>
$options 可选 Table::delete()
接受的选项列表
返回值
bool
_unlinkAssociated() ¶ protected
_unlinkAssociated(array $foreignKeyReference, Cake\Datasource\EntityInterface $entity, Cake\ORM\Table $target, iterable $remainingEntities = [], array<string, mixed> $options = []): bool
根据源和目标之间的依赖关系以及外键可空性删除/设置相关对象的空值。跳过删除 $remainingEntities 中存在的记录
参数
-
array
$foreignKeyReference 定义目标实体和父实体之间链接的外键引用。
-
Cake\Datasource\EntityInterface
$entity 应该取消分配关联实体的实体
-
Cake\ORM\Table
$target 关联表
-
iterable
$remainingEntities 可选 不应该被删除的实体
-
array<string, mixed>
$options 可选 Table::delete()
接受的选项列表
返回值
bool
_variableName() ¶ protected
_variableName(string $name): string
创建视图的复数变量名
参数
-
string
$name 要使用的名称
返回值
string
attachTo() ¶ public
attachTo(Cake\ORM\Query\SelectQuery $query, array<string, mixed> $options = []): void
更改查询对象以在最终结果中包含关联的目标表数据
选项数组接受以下键
- includeFields: 是否在结果中包含目标模型字段
- foreignKey: 用作外键的字段名称,如果为 false,则不使用任何字段
- conditions: 包含用于过滤连接的条件列表的数组,这将与最初为这个关联配置的任何条件合并
- fields: 要包含在结果中的目标表中字段列表
- aliasPath: 一个点分隔字符串,表示从传递的查询主表到这个关联的关联名称路径。
- propertyPath: 用于表示从传递的查询主实体到此关联的关联属性路径的点分隔字符串。
- joinType: 查询中要使用的 SQL 连接类型。
- negateMatch: 将在传递的查询中追加一个条件,以排除与该关联匹配的结果。
参数
-
Cake\ORM\Query\SelectQuery
$query 要修改的查询,以包含目标表数据。
-
array<string, mixed>
$options 可选 要考虑的任何额外选项或覆盖。
返回值
void
抛出
RuntimeException
无法构建查询或关联。
canBeJoined() ¶ public
canBeJoined(array<string, mixed> $options = []): bool
此关联是否可以直接在查询联接中表达
参数
-
array<string, mixed>
$options 可选 可能会改变返回值的自定义选项键。
返回值
bool
cascadeDelete() ¶ public
cascadeDelete(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): bool
处理从关联模型级联删除。
每个实现类应该根据需要处理级联删除。
参数
-
Cake\Datasource\EntityInterface
$entity -
array<string, mixed>
$options 可选
返回值
bool
defaultRowValue() ¶ public
defaultRowValue(array<string, mixed> $row, bool $joined): array<string, mixed>
在为该关联附加一个具有默认空值的属性后返回修改后的行,该属性根据关联是外部联接还是外部获取来确定。
参数
-
array<string, mixed>
$row -
bool
$joined
返回值
array<string, mixed>
deleteAll() ¶ public
deleteAll(Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions): int
将删除操作代理到目标 Table::deleteAll()
方法
参数
-
Cake\Database\Expression\QueryExpressionClosure|array|string|null
$conditions 要使用的条件,接受 Query::where() 可以接受的任何内容。
返回值
int
另请参阅
eagerLoader() ¶ public
eagerLoader(array<string, mixed> $options): Closure
急切地加载目标表中与源表中的另一组记录相关的记录列表。源记录可以通过两种方式指定:第一种是通过传递一个在源表上查找的查询对象,另一种是通过显式传递源表中的主键值数组。
传递相关源记录的必要方式由“strategy”控制。当使用子查询策略时,它需要对源表进行查询。当使用选择策略时,将使用主键列表。
返回一个闭包,应该在特定查询中返回的每个记录上运行。此可调用函数将负责注入与每个传递的行相关的字段。
选项数组接受以下键
- query: 用于查找源表记录的 SelectQuery 对象。
- keys: 来自源表的列表主键值。
- foreignKey: 用于关联两个表的字段名称。
- conditions: 要传递给查询 where() 方法的条件列表。
- sort: 记录应该返回的方向。
- fields: 要从目标表中选择的字段列表。
- contain: 与目标表关联的要急切加载的相关表列表。
- strategy: 用于查找目标表记录的策略名称。
- nestKey: 当转换行时结果将被找到的数组键。
参数
-
array<string, mixed>
$options
返回值
Closure
exists() ¶ public
exists(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions): bool
在附加此关联的默认条件后,将操作代理到目标表的 exists 方法
参数
-
Cake\Database\ExpressionInterfaceClosure|array|string|null
$conditions 用于检查是否有任何记录匹配的条件。
返回值
bool
另请参阅
fetchTable() ¶ public
fetchTable(string|null $alias = null, array<string, mixed> $options = []): Cake\ORM\Table
获取表实例的便捷方法。
参数
-
string|null
$alias optional 要获取的别名。应为驼峰式命名法。如果为 `null`,则使用 `$defaultTable` 属性的值。
-
array<string, mixed>
$options 可选 要使用这些选项构建表。如果表已加载,则注册表选项将被忽略。
返回值
Cake\ORM\Table
抛出
Cake\Core\Exception\CakeException
如果 `$alias` 参数和 `$defaultTable` 属性都为 `null`。
另请参阅
find() ¶ public
find(array<string, mixed>|string|null $type = null, mixed ...$args): Cake\ORM\Query\SelectQuery
将查找操作代理到目标表的 find 方法,并根据此关联配置相应地修改查询
参数
-
array<string, mixed>|string|null
$type optional 要执行的查询类型,如果传递的是数组,则将被解释为 `$args` 参数。
-
mixed
...$args 与查找器特定参数匹配的参数。
返回值
Cake\ORM\Query\SelectQuery
另请参阅
getBindingKey() ¶ public
getBindingKey(): list<string>|string
获取表示与目标表绑定字段的字段的名称。如果没有手动指定,则使用拥有方表的主键。
返回值
list<string>|string
getConditions() ¶ public
getConditions(): Closure|array
获取从目标关联获取记录时始终包含的条件列表。
返回值
Closure|array
另请参阅
getDependent() ¶ public
getDependent(): bool
设置目标表上的记录是否依赖于源表。
这主要用于指示如果源表中的拥有记录被删除,则应该删除记录。
返回值
bool
getForeignKey() ¶ public
getForeignKey(): list<string>|string|false
获取表示到目标表的外键的字段的名称。
返回值
list<string>|string|false
getSort() ¶ public
getSort(): Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string|null
获取应返回目标记录的排序顺序。
返回值
Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string|null
getStrategy() ¶ public
getStrategy(): string
获取用于获取关联记录的策略名称。请记住,某些关联类型可能没有实现,而是一个默认策略,这将使对该设置的任何更改无效。
返回值
string
getTableLocator() ¶ public
getTableLocator(): Cake\ORM\Locator\LocatorInterface
获取表定位器。
返回值
Cake\ORM\Locator\LocatorInterface
isOwningSide() ¶ public
isOwningSide(Cake\ORM\Table $side): bool
返回传递的表是否是此关联的拥有方。这意味着如果 'source' 中的行不存在,则 'target' 表中的行会丢失重要或必需的信息。
参数
-
Cake\ORM\Table
$side 拥有权的潜在表格。
返回值
bool
link() ¶ public
link(Cake\Datasource\EntityInterface $sourceEntity, array $targetEntities, array<string, mixed> $options = []): bool
将源实体关联到提供的每个目标实体。使用此方法时,$targetEntities
中的所有实体都将追加到源实体的对应于此关联对象的属性。
此方法不检查链接唯一性。更改会保存在数据库中,也会保存在源实体中。
示例
$user = $users->get(1);
$allArticles = $articles->find('all')->toArray();
$users->Articles->link($user, $allArticles);
$user->get('articles')
将在链接后包含 $allArticles
中的所有文章。
参数
-
Cake\Datasource\EntityInterface
$sourceEntity 属于此关联的 `source` 侧的记录。
-
array
$targetEntities 属于此关联的 `target` 侧的实体列表。
-
array<string, mixed>
$options 可选 要传递给内部 `save` 调用的选项列表。
返回值
bool
replace() ¶ public
replace(Cake\Datasource\EntityInterface $sourceEntity, array $targetEntities, array<string, mixed> $options = []): bool
用传递的实体替换源实体和目标之间现有的关联链接。此方法进行智能清理,已持久化并存在于 $targetEntities
中的链接不会被删除,将为传递的目标实体创建新的链接,这些实体尚未在数据库中,其余的将被删除。
例如,如果一个作者有多篇文章,例如'article1'、'article 2' 和 'article 3',并且您将包含文章'article 1' 和 'article 4' 的实体的数组传递给此方法,则只有'article 1' 的链接将保留在数据库中,'article 2' 和 'article 3' 的链接将被删除,而 'article 4' 的链接将被创建。
现有的链接不会被删除和重新创建,它们要么保持不变,要么被更新。
此方法不检查链接唯一性。
成功后,传递的 `$sourceEntity` 将包含 `$targetEntities` 作为此关联的相应属性的值。
可以将要保存的新链接的附加选项传递给第三个参数,请检查 `Table::save()` 以了解接受的选项信息。
示例
$author->articles = [$article1, $article2, $article3, $article4];
$authors->save($author);
$articles = [$article1, $article3];
$authors->getAssociation('articles')->replace($author, $articles);
$author->get('articles')
最终将仅包含 [$article1, $article3]
。
参数
-
Cake\Datasource\EntityInterface
$sourceEntity 在此关联的源表中持久化的实体。
-
array
$targetEntities 要链接的目标表中的实体列表。
-
array<string, mixed>
$options 可选 要传递给内部 `save`/`delete` 调用的选项列表,用于持久化/更新新链接或删除现有链接。
返回值
bool
抛出
InvalidArgumentException
如果传递了未持久化的实体,或者如果任何实体都缺少主键值。
requiresKeys() ¶ public
requiresKeys(array<string, mixed> $options = []): bool
如果急切加载过程需要一组拥有表绑定的键才能用作查找器查询中的过滤器,则返回 true。
参数
-
array<string, mixed>
$options 可选 包含要使用的策略的选项。
返回值
bool
saveAssociated() ¶ public
saveAssociated(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): Cake\Datasource\EntityInterface|false
从源表获取一个实体,并查找是否存在与该关联的属性名称匹配的字段。通过传递提供的 $options
,找到的实体将保存到该关联的目标表中
参数
-
Cake\Datasource\EntityInterface
$entity 来自源表的实体。
-
array<string, mixed>
$options 可选 要传递给目标表中 save 方法的选项。
返回值
Cake\Datasource\EntityInterface|false
抛出
InvalidArgumentException
当无法遍历关联数据时。
另请参阅
setBindingKey() ¶ public
setBindingKey(list<string>|string $key): $this
设置表示与目标表绑定字段的字段的名称。如果没有手动指定,则使用拥有方表的主键。
参数
-
list<string>|string
$key 要用于将两个表链接在一起的表字段或字段。
返回值
$this
setCascadeCallbacks() ¶ public
setCascadeCallbacks(bool $cascadeCallbacks): $this
设置级联删除是否也应该触发回调。
参数
-
bool
$cascadeCallbacks 级联回调开关值
返回值
$this
setClassName() ¶ public
setClassName(string $className): $this
设置目标表对象的类名。
参数
-
string
$className 要设置的类名。
返回值
$this
抛出
InvalidArgumentException
如果在目标表解析后设置类名,并且它与目标表的类名不匹配。
setConditions() ¶ public
setConditions(Closure|array $conditions): $this
设置从目标关联获取记录时始终包含的条件列表。
参数
-
Closure|array
$conditions 要使用的条件列表
返回值
$this
另请参阅
setDependent() ¶ public
setDependent(bool $dependent): $this
设置目标表上的记录是否依赖于源表。
这主要用于指示如果源表中的拥有记录被删除,则应该删除记录。
如果未传入参数,则返回当前设置。
参数
-
bool
$dependent 设置依赖模式。使用 null 读取当前状态。
返回值
$this
setFinder() ¶ public
setFinder(array|string $finder): $this
设置用于从目标表获取行的默认查找器。
参数
-
array|string
$finder 要使用的查找器名称或查找器名称和选项的数组。
返回值
$this
setForeignKey() ¶ public
setForeignKey(list<string>|string $key): $this
设置表示到目标表的外键的字段的名称。
参数
-
list<string>|string
$key 用于将两个表链接在一起的键或键列表
返回值
$this
setJoinType() ¶ public
setJoinType(string $type): $this
设置将关联添加到查询时使用的联接类型。
参数
-
string
$type 要使用的联接类型(例如 INNER)
返回值
$this
setProperty() ¶ public
setProperty(string $name): $this
设置应使用目标表中的数据填充源表记录中的属性名称。
参数
-
string
$name 关联属性的名称。使用 null 读取当前值。
返回值
$this
setSaveStrategy() ¶ public
setSaveStrategy(string $strategy): $this
设置应用于保存的策略。
参数
-
string
$strategy 要使用的策略名称
返回值
$this
抛出
InvalidArgumentException
如果传递无效的策略名称
setSort() ¶ public
setSort(Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string $sort): $this
设置应返回目标记录的排序顺序。
参数
-
Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string
$sort 与 find() 兼容的排序子句
返回值
$this
setSource() ¶ public
setSource(Cake\ORM\Table $table): $this
设置关联源端的表实例。
参数
-
Cake\ORM\Table
$table 要分配为源端的实例
返回值
$this
setStrategy() ¶ public
setStrategy(string $name): $this
设置用于获取关联记录的策略名称。请记住,某些关联类型可能没有实现,而是一个默认策略,这将使对该设置的任何更改无效。
参数
-
string
$name 策略类型。使用 null 读取当前值。
返回值
$this
抛出
InvalidArgumentException
当提供无效策略时。
setTableLocator() ¶ public
setTableLocator(Cake\ORM\Locator\LocatorInterface $tableLocator): $this
设置表定位器。
参数
-
Cake\ORM\Locator\LocatorInterface
$tableLocator LocatorInterface 实例。
返回值
$this
setTarget() ¶ public
setTarget(Cake\ORM\Table $table): $this
设置关联目标端的表实例。
参数
-
Cake\ORM\Table
$table 要分配为目标端的实例
返回值
$this
transformRow() ¶ public
transformRow(array<string, mixed> $row, string $nestKey, bool $joined, string|null $targetProperty = null): array
将关联值的結果行正确嵌套到源结果中的正确数组键中。
参数
-
array<string, mixed>
$row 要转换的行
-
string
$nestKey 应在此关联结果下找到的结果的数组键
-
bool
$joined 该行是否直接与该关联联接的结果
-
string|null
$targetProperty 可选 源结果中关联数据应嵌套其中的属性名称。如果没有提供,将使用默认名称。
返回值
array
unlink() ¶ public
unlink(Cake\Datasource\EntityInterface $sourceEntity, array $targetEntities, array<string, mixed>|bool $options = []): void
删除传递的源实体与提供的每个目标实体之间的所有链接。此方法假设所有传递的对象都已持久化到数据库中,并且每个对象都包含一个主键值。
选项
除了 Table::delete()
接受的默认选项外,还支持以下键
- cleanProperty: 是否删除存储在
$sourceEntity
中的$targetEntities
中的所有对象(默认:true)
默认情况下,此方法将取消设置存储在源实体中的每个实体对象。
更改将持久化到数据库中,并在源实体中持久化。
示例
$user = $users->get(1);
$user->articles = [$article1, $article2, $article3, $article4];
$users->save($user, ['Associated' => ['Articles']]);
$allArticles = [$article1, $article2, $article3];
$users->Articles->unlink($user, $allArticles);
$article->get('articles')
将在数据库中删除后仅包含 [$article4]
参数
-
Cake\Datasource\EntityInterface
$sourceEntity 在此关联的源表中持久化的实体。
-
array
$targetEntities 为此关联持久化到目标表中的实体列表
-
array<string, mixed>|bool
$options 可选 要传递给内部
delete
调用的选项列表。如果为布尔值,它将用作“cleanProperty”选项的值。
返回值
void
抛出
InvalidArgumentException
如果传递了未持久化的实体,或者如果任何实体都缺少主键值。
updateAll() ¶ public
updateAll(Cake\Database\Expression\QueryExpressionClosure|array|string $fields, Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions): int
将更新操作代理到目标 Table::updateAll()
方法
参数
-
Cake\Database\Expression\QueryExpressionClosure|array|string
$fields 字段 => 新值的哈希。
-
Cake\Database\Expression\QueryExpressionClosure|array|string|null
$conditions 要使用的条件,接受 Query::where() 接受的任何内容
返回值
int
另请参阅
属性详情
$_sort ¶ protected
应返回目标记录的顺序。
类型
Cake\Database\ExpressionInterfaceClosure|arrayCake\Database\ExpressionInterface|string>|string|null