实体类
实体表示存储库中的一行结果。它公开用于检索和存储与该行关联的属性的方法。
属性概要
-
$_accessible protected
array<string, bool>
此实体中可以安全地进行批量赋值的字段映射,每个字段名指向一个布尔值,表示其状态。空数组表示没有字段可用于批量赋值。
-
$_accessors protected static
array<string, array<string, array<string, string>>>
保存每个类的 getter/setter 的缓存列表。
-
$_dirty protected
array<string, bool>
保存此对象最初创建后修改或添加的字段列表。
-
$_errors protected
array<string, mixed>
存储在此对象中的每个字段的错误列表。
-
$_fields protected
array<string, mixed>
保存此实体的所有字段及其值。
-
$_hasBeenVisited protected
bool
在递归遍历实体获取错误时存储当前访问状态。
-
$_hidden protected
list<string>
不应包含在 JSON 或此实体的数组表示中的字段名称列表。
-
$_invalid protected
array<string, mixed>
验证/修补时,无效字段及其数据的列表,用于错误。
-
$_new protected
bool
指示此实体是否尚未持久化。实体默认为假设它们是新的。可以使用 Table::persisted() 根据数据库中的记录设置实体上的新标志。
-
$_original protected
array<string, mixed>
保存所有已更改的字段及其此实体的原始值。
-
$_originalFields protected
list<string>
保存最初在实例化时设置的所有字段,或在标记为干净后。
-
$_registryAlias protected
string
此实体来自的存储库的别名
-
$_virtual protected
list<string>
计算或虚拟字段的列表,这些字段应包含在 JSON 或此实体的数组表示中。如果字段同时存在于 _hidden 和 _virtual 中,则该字段将不会出现在实体的数组/JSON 版本中。
-
$id public @property
mixed
常用的主键的别名。
-
$requireFieldPresence protected
bool
访问属性时是否检查字段是否存在。
方法概要
-
__construct() public
根据数组中的键初始化此实体的内部属性。可以使用以下选项列表
-
__debugInfo() public
返回一个可以用来描述此对象内部状态的数组。
-
__get() public
神奇 getter 用于访问在此实体中设置的字段。
-
__isset() public
返回此实体是否包含名为 $field 的字段,并且未设置为 null。
-
__set() public
神奇 setter 用于添加或编辑此实体中的字段。
-
__toString() public
以人类可读的格式返回此对象的字符串表示形式。
-
__unset() public
从此实体中删除一个字段。
-
_accessor() protected static
获取访问器方法名 访问器方法(可用或不可用)缓存在 $_accessors 中
-
_nestedErrors() protected
获取嵌套实体中错误的辅助方法
-
_readError() protected
从一个或多个对象中读取错误。
-
_readHasErrors() protected
读取一个或多个对象是否包含错误。
-
clean() public
将整个实体设置为干净,这意味着它将显示为没有任何字段被修改或添加。对于初始对象水化,这是一个有用的调用。
-
extract() public
返回一个包含在此实体中存储的请求字段的数组,索引为字段名。
-
extractOriginal() public
返回一个包含在此实体中存储的请求原始字段的数组,索引为字段名,如果它们存在。
-
extractOriginalChanged() public
返回一个只包含存储在此实体中的原始字段的数组,索引为字段名,如果它们存在。
-
get() public
根据名称返回字段的值。
-
getAccessible() public
返回此实体的原始可访问配置。
*
通配符指的是所有字段。 -
getDirty() public
获取脏字段。
-
getError() public
返回字段的验证错误。
-
getErrors() public
返回所有验证错误。
-
getHidden() public
获取隐藏的字段。
-
getInvalid() public
获取验证/修补时无效字段及其数据的列表。
-
getInvalidField() public
获取无效字段的单个值。如果未设置,则返回 null。
-
getOriginal() public
根据名称返回原始字段的值。
-
getOriginalFields() public
返回原始字段的数组。原始字段是实体最初初始化时拥有的字段。
-
getOriginalValues() public
获取实体的所有原始值。
-
getSource() public
返回此实体来自的存储库的别名。
-
getVirtual() public
获取此实体上的虚拟字段。
-
getVisible() public
获取可见字段列表。
-
has() public
返回此实体是否包含名为 $field 的字段。
-
hasErrors() public
返回此实体是否包含错误。
-
hasOriginal() public
返回字段是否具有原始值。
-
hasValue() public
检查字段是否具有值。
-
isAccessible() public
检查字段是否可访问。
-
isDirty() public
检查实体是否为脏,或其单个字段是否为脏。
-
isEmpty() public
检查字段是否为空。
-
isNew() public
返回此实体是否已经持久化。
-
isOriginalField() public
返回字段是否为原始字段。
-
jsonSerialize() public
返回将被序列化为 JSON 的字段。
-
offsetExists() public
实现 isset($entity);
-
offsetGet() public
实现 $entity[$offset];
-
offsetSet() public
实现 $entity[$offset] = $value;
-
offsetUnset() public
实现 unset($result[$offset]);
-
requireFieldPresence() public
访问属性时启用/禁用字段存在检查。
-
set() public
设置此实体中的单个字段。
-
setAccess() public
存储此实体中是否可以更改或设置字段值。特殊的字段
*
也可以被标记为可访问或受保护,这意味着之前指定的任何其他字段都将采用其值。例如$entity->setAccess('*', true)
表示默认情况下任何未指定字段都是可访问的。 -
setDirty() public
设置单个字段的脏污状态。
-
setError() public
设置单个字段的错误。
-
setErrors() public
将错误信息设置为实体。
-
setHidden() public
设置隐藏字段。
-
setInvalid() public
将字段设置为无效,不可修补到实体中。
-
setInvalidField() public
将字段设置为无效,不可修补到实体中。
-
setNew() public
设置此实体的状态。
-
setOriginalField() protected
将给定字段或字段列表设置为原始字段。通常不需要手动调用此方法。
-
setSource() public
设置源别名。
-
setVirtual() public
设置此实体的虚拟字段。
-
toArray() public
返回包含已设置为此实体的所有字段的数组。
-
unset() public
从此实体中移除字段或字段列表。
方法详情
__construct() ¶ public
__construct(array<string, mixed> $properties = [], array<string, mixed> $options = [])
根据数组中的键初始化此实体的内部属性。可以使用以下选项列表
- useSetters: 是否为属性使用内部设置器。
- markClean: 设置属性后是否将所有属性标记为干净。
- markNew: 此实例是否尚未持久化。
- guard: 是否阻止设置不可访问的属性 (默认值: false)。
- source: 表示此实体来自的存储库别名的字符串。
示例
$entity = new Entity(['id' => 1, 'name' => 'Andrew'])
参数
-
array<string, mixed>
$properties optional 要在此实体中设置的属性哈希表。
-
array<string, mixed>
$options optional 创建此实体时使用的选项列表。
__debugInfo() ¶ public
__debugInfo(): array<string, mixed>
返回一个可以用来描述此对象内部状态的数组。
返回值
array<string, mixed>
__get() ¶ public
__get(string $field): mixed
神奇 getter 用于访问在此实体中设置的字段。
参数
-
string
$field 要访问的字段的名称。
返回值
mixed
__isset() ¶ public
__isset(string $field): bool
返回此实体是否包含名为 $field 的字段,并且未设置为 null。
参数
-
string
$field 要检查的字段。
返回值
bool
__set() ¶ public
__set(string $field, mixed $value): void
神奇 setter 用于添加或编辑此实体中的字段。
参数
-
string
$field 要设置的字段的名称。
-
mixed
$value 要设置为字段的值。
返回值
void
_accessor() ¶ protected static
_accessor(string $property, string $type): string
获取访问器方法名 访问器方法(可用或不可用)缓存在 $_accessors 中
参数
-
string
$property 要从中派生 getter 名称的字段名称。
-
string
$type 访问器类型 ('get' 或 'set')。
返回值
string
_nestedErrors() ¶ protected
_nestedErrors(string $field): array
获取嵌套实体中错误的辅助方法
参数
-
string
$field 要检查错误的此实体中的字段。
返回值
array
_readError() ¶ protected
_readError(Cake\Datasource\EntityInterface|iterable $object, string|null $path = null): array
从一个或多个对象中读取错误。
参数
-
Cake\Datasource\EntityInterface|iterable
$object 要从中读取错误的对象。
-
string|null
$path optional 错误的字段名称。
返回值
array
_readHasErrors() ¶ protected
_readHasErrors(Cake\Datasource\EntityInterface|array $object): bool
读取一个或多个对象是否包含错误。
参数
-
Cake\Datasource\EntityInterface|array
$object 要从中读取错误的对象。
返回值
bool
extract() ¶ public
extract(list<string> $fields, bool $onlyDirty = false): array<string, mixed>
返回一个包含在此实体中存储的请求字段的数组,索引为字段名。
参数
-
list<string>
$fields 要返回的字段列表。
-
bool
$onlyDirty optional 仅当字段脏污时返回请求的字段。
返回值
array<string, mixed>
extractOriginal() ¶ public
extractOriginal(list<string> $fields): array<string, mixed>
返回一个包含在此实体中存储的请求原始字段的数组,索引为字段名,如果它们存在。
与原始值保持不变的字段将包含在该方法的返回值中。
参数
-
list<string>
$fields 要返回的字段列表。
返回值
array<string, mixed>
extractOriginalChanged() ¶ public
extractOriginalChanged(list<string> $fields): array<string, mixed>
返回一个只包含存储在此实体中的原始字段的数组,索引为字段名,如果它们存在。
此方法只返回自实体构建以来已被修改的字段。未更改的字段将被省略。
参数
-
list<string>
$fields 要返回的字段列表。
返回值
array<string, mixed>
get() ¶ public
get(string $field): mixed
根据名称返回字段的值。
参数
-
string
$field 要检索的字段的名称。
返回值
mixed
抛出
InvalidArgumentException
如果传递了空字段名称。
getError() ¶ public
getError(string $field): array
返回字段的验证错误。
参数
-
string
$field 要从中获取错误的字段名称。
返回值
array
getInvalid() ¶ public
getInvalid(): array<string, mixed>
获取验证/修补时无效字段及其数据的列表。
返回值
array<string, mixed>
getInvalidField() ¶ public
getInvalidField(string $field): mixed|null
获取无效字段的单个值。如果未设置,则返回 null。
参数
-
string
$field 字段的名称。
返回值
mixed|null
getOriginal() ¶ public
getOriginal(string $field, bool $allowFallback = true): mixed
根据名称返回原始字段的值。
参数
-
string
$field 检索原始值的字段的名称。
-
bool
$allowFallback optional 是否允许在不存在原始值时回退到当前字段值。
返回值
mixed
抛出
InvalidArgumentException
如果传递了空字段名称。
getOriginalFields() ¶ public
getOriginalFields(): list<string>
返回原始字段的数组。原始字段是实体最初初始化时拥有的字段。
返回值
list<string>
getVisible() ¶ public
getVisible(): list<string>
获取可见字段列表。
可见字段列表包含所有标准字段以及虚拟字段,减去隐藏字段。
返回值
list<string>
has() ¶ public
has(list<string>|string $field): bool
返回此实体是否包含名为 $field 的字段。
即使字段设置为null
,它也会返回true
。
示例
$entity = new Entity(['id' => 1, 'name' => null]);
$entity->has('id'); // true
$entity->has('name'); // true
$entity->has('last_name'); // false
您可以通过传递数组来检查多个字段
$entity->has(['name', 'last_name']);
检查多个字段时,所有字段都必须具有值(即使是null
)才能使方法返回true
。
参数
-
list<string>|string
$field 要检查的字段。
返回值
bool
hasErrors() ¶ public
hasErrors(bool $includeNested = true): bool
返回此实体是否包含错误。
参数
-
bool
$includeNested optional true 将检查嵌套实体是否存在错误()
返回值
bool
hasValue() ¶ public
hasValue(string $field): bool
检查字段是否具有值。
此方法将对以下情况返回 true:
- 非空字符串
- 非空数组
- 任何对象
- 整数,即使是
0
- 浮点数,即使是 0.0
在所有其他情况下为 false。
参数
-
string
$field 要检查的字段。
返回值
bool
isAccessible() ¶ public
isAccessible(string $field): bool
检查字段是否可访问。
示例
$entity->isAccessible('id'); // Returns whether it can be set or not
参数
-
string
$field 要检查的字段名称
返回值
bool
isDirty() ¶ public
isDirty(string|null $field = null): bool
检查实体是否为脏,或其单个字段是否为脏。
参数
-
string|null
$field optional 要检查状态的字段。整个实体为 null。
返回值
bool
isEmpty() ¶ public
isEmpty(string $field): bool
检查字段是否为空。
这不像 PHP empty()
函数那样工作。该方法将对以下情况返回 true:
''
(空字符串)null
[]
在所有其他情况下为 false。
参数
-
string
$field 要检查的字段。
返回值
bool
isOriginalField() ¶ public
isOriginalField(string $name): bool
返回字段是否为原始字段。
参数
-
string
$name
返回值
bool
jsonSerialize() ¶ public
jsonSerialize(): array<string, mixed>
返回将被序列化为 JSON 的字段。
返回值
array<string, mixed>
offsetExists() ¶ public
offsetExists(string $offset): bool
实现 isset($entity);
参数
-
string
$offset 要检查的偏移量。
返回值
bool
offsetGet() ¶ public
offsetGet(string $offset): mixed
实现 $entity[$offset];
参数
-
string
$offset 要获取的偏移量。
返回值
mixed
offsetSet() ¶ public
offsetSet(string $offset, mixed $value): void
实现 $entity[$offset] = $value;
参数
-
string
$offset 要设置的偏移量。
-
mixed
$value 要设置的值。
返回值
void
offsetUnset() ¶ public
offsetUnset(string $offset): void
实现 unset($result[$offset]);
参数
-
string
$offset 要删除的偏移量。
返回值
void
requireFieldPresence() ¶ public
requireFieldPresence(bool $value = true): void
访问属性时启用/禁用字段存在检查。
如果启用,尝试访问不存在的属性时将抛出异常。
参数
-
bool
$value optional true
表示启用,false
表示禁用。
返回值
void
set() ¶ public
set(array<string, mixed>|string $field, mixed $value = null, array<string, mixed> $options = []): $this
设置此实体中的单个字段。
示例
$entity->set('name', 'Andrew');
还可以通过将散列数组作为字段(以字段 => 值对的形式)传递,以一次调用方式将多个字段批量分配给此实体。
示例
$entity->set(['name' => 'andrew', 'id' => 1]);
echo $entity->name // prints andrew
echo $entity->id // prints 1
有时在分配字段时绕过此实体中的 setter 函数很方便。您可以通过使用 $options
参数禁用 setter
选项来实现此目的。
$entity->set('name', 'Andrew', ['setter' => false]);
$entity->set(['name' => 'Andrew', 'id' => 1], ['setter' => false]);
当接受用户输入时,应谨慎处理批量赋值,默认情况下,实体会在批量分配字段时保护所有字段。您可以使用 guard
选项禁用单个 set 调用的保护。
$entity->set(['name' => 'Andrew', 'id' => 1], ['guard' => false]);
在单独分配字段时,不需要使用 guard 选项。
// No need to use the guard option.
$entity->set('name', 'Andrew');
您可以使用 asOriginal
选项将给定字段设置为原始字段,如果在实例化实体时该字段不存在。
$entity = new Entity(['name' => 'andrew', 'id' => 1]);
$entity->set('phone_number', '555-0134');
print_r($entity->getOriginalFields()) // prints ['name', 'id']
$entity->set('phone_number', '555-0134', ['asOriginal' => true]);
print_r($entity->getOriginalFields()) // prints ['name', 'id', 'phone_number']
参数
-
array<string, mixed>|string
$field 要设置的字段名称或带有各自值的字段列表
-
mixed
$value optional 要设置为字段的值,如果第一个参数也是数组,则为数组,在这种情况下将被视为 $options
-
array<string, mixed>
$options optional 用于设置字段的选项。允许的选项键是
setter
、guard
和asOriginal
返回值
$this
抛出
InvalidArgumentException
setAccess() ¶ public
setAccess(list<string>|string $field, bool $set): $this
存储此实体中是否可以更改或设置字段值。特殊的字段 *
也可以被标记为可访问或受保护,这意味着之前指定的任何其他字段都将采用其值。例如 $entity->setAccess('*', true)
表示默认情况下任何未指定字段都是可访问的。
您也可以使用字段数组调用此方法,在这种情况下,它们将分别采用第二个参数中指定的可访问性值。
示例
$entity->setAccess('id', true); // Mark id as not protected
$entity->setAccess('author_id', false); // Mark author_id as protected
$entity->setAccess(['id', 'user_id'], true); // Mark both fields as accessible
$entity->setAccess('*', false); // Mark all fields as protected
参数
-
list<string>|string
$field 要更改其可访问性的单个字段或字段列表
-
bool
$set True 将字段标记为可访问,false 将将其标记为受保护。
返回值
$this
setDirty() ¶ public
setDirty(string $field, bool $isDirty = true): $this
设置单个字段的脏污状态。
参数
-
string
$field 要设置或检查状态的字段
-
bool
$isDirty optional true 表示已更改字段,false 表示未更改字段。默认为 true。
返回值
$this
setError() ¶ public
setError(string $field, array|string $errors, bool $overwrite = false): $this
设置单个字段的错误。
示例
// Sets the error messages for a single field
$entity->setError('salary', ['must be numeric', 'must be a positive number']);
参数
-
string
$field 要获取错误的字段,或要设置的错误数组。
-
array|string
$errors 要设置为 $field 的错误。
-
bool
$overwrite optional 是否覆盖 $field 的预先存在的错误
返回值
$this
setErrors() ¶ public
setErrors(array $errors, bool $overwrite = false): $this
将错误信息设置为实体。
示例
// Sets the error messages for multiple fields at once
$entity->setErrors(['salary' => ['message'], 'name' => ['another message']]);
参数
-
array
$errors 要设置的错误数组。
-
bool
$overwrite optional 是否覆盖 $fields 的预先存在的错误
返回值
$this
setHidden() ¶ public
setHidden(list<string> $fields, bool $merge = false): $this
设置隐藏字段。
参数
-
list<string>
$fields 要从数组导出中隐藏的字段数组。
-
bool
$merge optional 将新字段与现有字段合并。默认情况下为 false。
返回值
$this
setInvalid() ¶ public
setInvalid(array<string, mixed> $fields, bool $overwrite = false): $this
将字段设置为无效,不可修补到实体中。
这在需要在修补后获取错误消息的原始值的批处理操作时很有用。此值不能修补到实体中,并且只是复制到 _invalid 属性中,用于调试目的或能够将其记录下来。
参数
-
array<string, mixed>
$fields 要设置的值。
-
bool
$overwrite optional 是否覆盖 $field 的预先存在的错误。
返回值
$this
setInvalidField() ¶ public
setInvalidField(string $field, mixed $value): $this
将字段设置为无效,不可修补到实体中。
参数
-
string
$field 要设置的值。
-
mixed
$value 要设置为 $field 的无效值。
返回值
$this
setNew() ¶ public
setNew(bool $new): $this
设置此实体的状态。
使用 true
表示实体尚未持久保存到数据库中,false
表示已持久保存。
参数
-
bool
$new 指示此实体是否已持久保存。
返回值
$this
setOriginalField() ¶ protected
setOriginalField(list<string>|string $field, bool $merge = true): $this
将给定字段或字段列表设置为原始字段。通常不需要手动调用此方法。
参数
-
list<string>|string
$field 要设置为原始字段的字段名称或字段列表
-
bool
$merge optional
返回值
$this
setVirtual() ¶ public
setVirtual(list<string> $fields, bool $merge = false): $this
设置此实体的虚拟字段。
参数
-
list<string>
$fields 要视为虚拟的字段数组。
-
bool
$merge optional 将新字段与现有字段合并。默认情况下为 false。
返回值
$this
toArray() ¶ public
toArray(): array<string, mixed>
返回包含已设置为此实体的所有字段的数组。
此方法还将递归地将分配给字段的实体转换为数组。
返回值
array<string, mixed>
unset() ¶ public
unset(list<string>|string $field): $this
从此实体中移除字段或字段列表。
示例
$entity->unset('name');
$entity->unset(['name', 'last_name']);
参数
-
list<string>|string
$field 要取消设置的字段。
返回值
$this
属性详细信息
$_accessible ¶ protected
此实体中可以安全地进行批量赋值的字段映射,每个字段名指向一个布尔值,表示其状态。空数组表示没有字段可用于批量赋值。
特殊字段 '*' 也可以被映射,这意味着地图中未定义的任何其他字段都将获取其值。例如,'*' => true
表示地图中未定义的任何字段默认情况下将可用于批量赋值。
类型
array<string, bool>
$_accessors ¶ 受保护的 静态的
保存每个类的 getter/setter 的缓存列表。
类型
array<string, array<string, array<string, string>>>
$_hidden ¶ 受保护的
不应包含在 JSON 或此实体的数组表示中的字段名称列表。
类型
list<string>
$_virtual ¶ 受保护的
计算或虚拟字段的列表,这些字段应包含在 JSON 或此实体的数组表示中。如果字段同时存在于 _hidden 和 _virtual 中,则该字段将不会出现在实体的数组/JSON 版本中。
类型
list<string>