类 Marshaller
包含将数组数据转换为实体的逻辑。
在将请求数据转换为实体时很有用。
参见: \Cake\ORM\Table::newEntity()
参见: \Cake\ORM\Table::newEntities()
参见: \Cake\ORM\Table::patchEntity()
参见: \Cake\ORM\Table::patchEntities()
属性摘要
-
$_table protected
Cake\ORM\Table
此 marshaller 对应的表实例。
方法摘要
-
__construct() public
构造函数。
-
_belongsToMany() protected
编组属于多方关联的数据。
-
_buildPropertyMap() protected
构建属性 => 编组可调用函数的映射。
-
_loadAssociatedByIds() protected
从 ID 加载属于多方关联的列表。
-
_marshalAssociation() protected
创建一个新的子 marshaller 并编组关联的数据。
-
_mergeAssociation() protected
创建一个新的子 marshaller 并合并关联的数据。
-
_mergeBelongsToMany() protected
创建一个新的子 marshaller 并合并属于多方关联的关联数据。
-
_mergeJoinData() protected
将特殊的 _joinData 属性合并到实体集中。
-
_normalizeAssociations() protected
从原始传递的关联列表中返回一个数组,其中点符号被转换为嵌套数组,以便其他例程可以解析它们
-
_prepareDataAndOptions() protected
返回准备用于验证和编组的数据和选项。
-
_validate() protected
根据传递的选项返回数据集的验证错误。
-
dispatchAfterMarshal() protected
分派 Model.afterMarshal 事件。
-
many() public
水合多个实体及其关联数据。
-
merge() public
将
$data
合并到$entity
中,并对$options
中传递的每个关联名称递归执行相同的操作。在合并关联时,如果给定关联中父实体中不存在实体,则将创建一个新实体。 -
mergeMany() public
将
$data
中的每个元素合并到$entities
中的每个实体中,并对$options
中传递的每个关联名称递归执行相同的操作。在合并关联时,如果给定关联中父实体中不存在实体,则将创建一个新实体。 -
one() public
水合一个实体及其关联数据。
方法详细信息
__construct() ¶ public
__construct(Cake\ORM\Table $table)
构造函数。
参数
-
Cake\ORM\Table
$table 此 marshaller 对应的表。
_belongsToMany() ¶ protected
_belongsToMany(Cake\ORM\Association\BelongsToMany $assoc, array $data, array<string, mixed> $options = []): arrayCake\Datasource\EntityInterface>
编组属于多方关联的数据。
构建相关的实体并处理连接表实体的特殊情况。
参数
-
Cake\ORM\Association\BelongsToMany
$assoc 要编组的关联。
-
array
$data 要转换为实体的数据。
-
array<string, mixed>
$options optional 选项列表。
返回值
arrayCake\Datasource\EntityInterface>
抛出
BadMethodCallException
InvalidArgumentException
RuntimeException
_buildPropertyMap() ¶ protected
_buildPropertyMap(array $data, array<string, mixed> $options): array
构建属性 => 编组可调用函数的映射。
参数
-
array
$data 正在编组的数据。
-
array<string, mixed>
$options 包含 'associated' 键的选项列表。
返回值
array
抛出
InvalidArgumentException
当关联不存在时。
_loadAssociatedByIds() ¶ protected
_loadAssociatedByIds(Cake\ORM\Association $assoc, array $ids): arrayCake\Datasource\EntityInterface>
从 ID 加载属于多方关联的列表。
参数
-
Cake\ORM\Association
$assoc 属于多方关联的关联类。
-
array
$ids 要加载的 ID 列表。
返回值
arrayCake\Datasource\EntityInterface>
_marshalAssociation() ¶ protected
_marshalAssociation(Cake\ORM\Association $assoc, mixed $value, array<string, mixed> $options): Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null
创建一个新的子 marshaller 并编组关联的数据。
参数
-
Cake\ORM\Association
$assoc 要编组的关联
-
mixed
$value 要水合的数据。如果不是数组,此方法将返回 null。
-
array<string, mixed>
$options 选项列表。
返回值
Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null
_mergeAssociation() ¶ protected
_mergeAssociation(Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null $original, Cake\ORM\Association $assoc, mixed $value, array<string, mixed> $options): Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null
创建一个新的子 marshaller 并合并关联的数据。
参数
-
Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null
$original 原始实体
-
Cake\ORM\Association
$assoc 要合并的关联
-
mixed
$value 要水合的数据数组。如果不是数组,此方法将返回 null。
-
array<string, mixed>
$options 选项列表。
返回值
Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>|null
_mergeBelongsToMany() ¶ protected
_mergeBelongsToMany(arrayCake\Datasource\EntityInterface> $original, Cake\ORM\Association\BelongsToMany $assoc, array $value, array<string, mixed> $options): arrayCake\Datasource\EntityInterface>
创建一个新的子 marshaller 并合并属于多方关联的关联数据。
参数
-
arrayCake\Datasource\EntityInterface>
$original 原始实体列表。
-
Cake\ORM\Association\BelongsToMany
$assoc 要编组的关联
-
array
$value 要水合的数据
-
array<string, mixed>
$options 选项列表。
返回值
arrayCake\Datasource\EntityInterface>
_mergeJoinData() ¶ protected
_mergeJoinData(arrayCake\Datasource\EntityInterface> $original, Cake\ORM\Association\BelongsToMany $assoc, array $value, array<string, mixed> $options): arrayCake\Datasource\EntityInterface>
将特殊的 _joinData 属性合并到实体集中。
参数
-
arrayCake\Datasource\EntityInterface>
$original 原始实体列表。
-
Cake\ORM\Association\BelongsToMany
$assoc 要编组的关联
-
array
$value 要水合的数据
-
array<string, mixed>
$options 选项列表。
返回值
arrayCake\Datasource\EntityInterface>
_normalizeAssociations() ¶ protected
_normalizeAssociations(array|string $associations): array
从原始传递的关联列表中返回一个数组,其中点符号被转换为嵌套数组,以便其他例程可以解析它们
参数
-
array|string
$associations 包含的关联数组。
返回值
array
_prepareDataAndOptions() ¶ protected
_prepareDataAndOptions(array<string, mixed> $data, array<string, mixed> $options): array
返回准备用于验证和编组的数据和选项。
参数
-
array<string, mixed>
$data 要准备的数据。
-
array<string, mixed>
$options 传递给此 marshaller 的选项。
返回值
array
_validate() ¶ protected
_validate(array $data, string|bool $validator, bool $isNew): array
根据传递的选项返回数据集的验证错误。
参数
-
array
$data 要验证的数据。
-
string|bool
$validator 验证器名称或
true
表示默认验证器。-
bool
$isNew 是否是一个新的实体或要更新的实体。
返回值
array
抛出
RuntimeException
如果无法创建验证器。
dispatchAfterMarshal() ¶ protected
dispatchAfterMarshal(Cake\Datasource\EntityInterface $entity, array $data, array<string, mixed> $options = []): void
分派 Model.afterMarshal 事件。
参数
-
Cake\Datasource\EntityInterface
$entity 已编组的实体。
-
array
$data 要使用的只读 $data。
-
array<string, mixed>
$options optional 只读的选项列表。
返回值
void
many() ¶ public
many(array $data, array<string, mixed> $options = []): arrayCake\Datasource\EntityInterface>
水合多个实体及其关联数据。
选项
- validate: 设置为 false 以禁用验证。也可以是字符串,表示要应用的验证器规则集。默认为 true/default。
- associated: 此处列出的关联也将被编组。默认为 null。
- fields: 要分配给实体的允许字段列表。如果不存在,将使用实体中的可访问字段列表。默认为 null。
- accessibleFields: 要在实体可访问字段中允许或拒绝的字段列表。默认为 null
- forceNew: 启用后,属于多方关联将在设置主键值时创建 'new' 实体,并且记录不存在。通常,缺少实体上的主键将被忽略。默认为 false。
参数
-
array
$data 要水合的数据。
-
array<string, mixed>
$options optional 选项列表
返回值
arrayCake\Datasource\EntityInterface>
另请参阅
\Cake\ORM\Entity::$_accessible
merge() ¶ public
merge(Cake\Datasource\EntityInterface $entity, array $data, array<string, mixed> $options = []): Cake\Datasource\EntityInterface
将 $data
合并到 $entity
中,并对 $options
中传递的每个关联名称递归执行相同的操作。在合并关联时,如果给定关联中父实体中不存在实体,则将创建一个新实体。
当合并 HasMany 或 BelongsToMany 关联时,$data
数组中的所有实体都会出现,可以通过主键匹配的实体将得到数据合并,而无法匹配的实体将被丢弃。ids
选项可用于确定关联是否必须使用 _ids
格式。
选项
- associated: 此处列出的关联也将被序列化。
- validate: 是否在对实体进行水化之前验证数据。也可以设置为字符串以使用特定的验证器。默认为 true/default。
- fields: 允许分配给实体的字段列表。如果不存在,将使用实体中的可访问字段列表。
- accessibleFields: 允许或拒绝实体可访问字段的字段列表。
以上选项可以在每个嵌套的 associated
数组中使用。除了以上选项之外,您还可以为 HasMany 和 BelongsToMany 关联使用 onlyIds
选项。当为 true 时,此选项将请求数据限制为仅从 _ids
读取。
$result = $marshaller->merge($entity, $data, [
'associated' => ['Tags' => ['onlyIds' => true]]
]);
$result = $marshaller->merge($entity, $data, [
'associated' => [
'Tags' => [
'associated' => ['DeeperAssoc1', 'DeeperAssoc2']
]
]
]);
参数
-
Cake\Datasource\EntityInterface
$entity 将被合并数据的实体
-
array
$data 要合并到实体中的字段的键值列表
-
array<string, mixed>
$options optional 选项列表。
返回值
Cake\Datasource\EntityInterface
另请参阅
mergeMany() ¶ public
mergeMany(iterableCake\Datasource\EntityInterface> $entities, array $data, array<string, mixed> $options = []): arrayCake\Datasource\EntityInterface>
将 $data
中的每个元素合并到 $entities
中的每个实体中,并对 $options
中传递的每个关联名称递归执行相同的操作。在合并关联时,如果给定关联中父实体中不存在实体,则将创建一个新实体。
$data
中的记录使用主键列与实体进行匹配。$entities
中无法与 $data
中任何记录匹配的条目将被丢弃。无法匹配的 $data
中的记录将被序列化为新的实体。
当合并 HasMany 或 BelongsToMany 关联时,$data
数组中的所有实体都会出现,可以通过主键匹配的实体将得到数据合并,而无法匹配的实体将被丢弃。
选项
- validate: 是否在对实体进行水化之前验证数据。也可以设置为字符串以使用特定的验证器。默认为 true/default。
- associated: 此处列出的关联也将被序列化。
- fields: 允许分配给实体的字段列表。如果不存在,将使用实体中的可访问字段列表。
- accessibleFields: 允许或拒绝实体可访问字段的字段列表。
参数
-
iterableCake\Datasource\EntityInterface>
$entities 将被合并数据的实体
-
array
$data 要合并到实体中的数组列表
-
array<string, mixed>
$options optional 选项列表。
返回值
arrayCake\Datasource\EntityInterface>
另请参阅
one() ¶ public
one(array<string, mixed> $data, array<string, mixed> $options = []): Cake\Datasource\EntityInterface
水合一个实体及其关联数据。
选项
- validate: 设置为 false 以禁用验证。也可以是字符串,表示要应用的验证器规则集。默认为 true/default。
- associated: 此处列出的关联也将被编组。默认为 null。
- fields: 要分配给实体的允许字段列表。如果不存在,将使用实体中的可访问字段列表。默认为 null。
- accessibleFields: 要在实体可访问字段中允许或拒绝的字段列表。默认为 null
- forceNew: 启用后,属于多方关联将在设置主键值时创建 'new' 实体,并且记录不存在。通常,缺少实体上的主键将被忽略。默认为 false。
以上选项可以在每个嵌套的 associated
数组中使用。除了以上选项之外,您还可以为 HasMany 和 BelongsToMany 关联使用 onlyIds
选项。当为 true 时,此选项将请求数据限制为仅从 _ids
读取。
$result = $marshaller->one($data, [
'associated' => ['Tags' => ['onlyIds' => true]]
]);
$result = $marshaller->one($data, [
'associated' => [
'Tags' => ['accessibleFields' => ['*' => true]]
]
]);
$result = $marshaller->one($data, [
'associated' => [
'Tags' => [
'associated' => ['DeeperAssoc1', 'DeeperAssoc2']
]
]
]);
参数
-
array<string, mixed>
$data 要水合的数据。
-
array<string, mixed>
$options optional 选项列表
返回值
Cake\Datasource\EntityInterface
另请参阅
\Cake\ORM\Entity::$_accessible