CakePHP
  • 文档
    • 手册
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识和商标
  • 商业解决方案
  • 周边商品
  • Road Trip
  • 团队
  • 社区
    • 社区
    • 参与
    • 问题 (Github)
    • Bakery
    • 特色资源
    • 培训
    • 聚会
    • 我的 CakePHP
    • CakeFest
    • 新闻简报
    • Linkedin
    • YouTube
    • Facebook
    • Twitter
    • Mastodon
    • 帮助和支持
    • 论坛
    • Stack Overflow
    • IRC
    • Slack
    • 付费支持
CakePHP

C CakePHP 5.1 Chiffon API

  • 项目
    • CakePHP
      • CakePHP
      • Chronos
      • Elastic Search
      • 队列
  • 版本
    • 5.1
      • 5.1
      • 5.0
      • 4.5
      • 4.4
      • 4.3
      • 4.2
      • 4.1
      • 4.0
      • 3.10
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

命名空间

  • 全局
  • Cake
    • 缓存
    • 集合
    • 命令
    • 控制台
    • 控制器
    • 核心
    • 数据库
    • 数据源
    • 错误
    • 事件
    • 表单
    • Http
    • I18n
    • 日志
    • 邮件
    • 网络
    • ORM
      • 关联
      • 行为
      • 异常
      • 定位器
      • 查询
      • 规则
    • 路由
    • 测试套件
    • 实用工具
    • 验证
    • 视图

类表

表示单个数据库表。

提供从表中检索数据的函数,并管理此表与其他表的关联。可以为同一个数据库表创建多个此类的实例,但使用不同的别名。这允许您以更丰富和更具表现力的方式访问您的数据库结构。

检索数据

检索数据的首要方法是使用 Table::find()。有关更多信息,请参见该方法。

动态查找器

除了标准的 find($type) 查找器方法之外,CakePHP 还提供了动态查找器方法。这些方法允许您轻松地设置基本条件。例如,要按用户名过滤用户,您将调用

$query = $users->findByUsername('mark');

您还可以使用 Or 或 And 在多个字段上组合条件

$query = $users->findByUsernameOrEmail('mark', '[email protected]');

批量更新/删除

您可以使用 Table::updateAll() 和 Table::deleteAll() 来执行批量更新/删除操作。您应该注意,批量更新/删除不会触发事件。

事件

Table 对象在 find、delete 和 save 操作期间作为生命周期钩子发出多个事件。所有事件都使用 CakePHP 事件包

  • Model.beforeFind 在每次 find 操作之前触发。通过停止事件并提供返回值,您可以完全绕过 find 操作。对 $query 实例所做的任何更改都将保留在整个 find 操作中。$primary 参数指示这是根查询还是关联查询。

  • Model.buildValidator 允许监听器修改提供的命名验证器验证规则。

  • Model.buildRules 允许监听器通过添加更多规则来修改规则检查器。

  • Model.beforeRules 在实体使用规则检查器进行验证之前触发。通过停止此事件,您可以返回规则检查操作的最终值。

  • Model.afterRules 在实体上检查完规则后触发。通过停止此事件,您可以返回规则检查操作的最终值。

  • Model.beforeSave 在每次保存实体之前触发。停止此事件将中止保存操作。当事件被停止时,将返回事件的结果。

  • Model.afterSave 在实体被保存后触发。

  • Model.afterSaveCommit 在包含 save 操作的事务提交后触发。它也触发非原子保存,其中数据库操作是隐式提交的。该事件仅针对直接调用 save() 的主表触发。如果在调用 save 之前启动事务,则不会触发该事件。

  • Model.beforeDelete 在实体被删除之前触发。通过停止此事件,您将中止删除操作。

  • Model.afterDelete 在实体被删除后触发。

回调

您可以通过实现以下生命周期方法,在您的表类中订阅上述事件

  • beforeFind(EventInterface $event, SelectQuery $query, ArrayObject $options, boolean $primary)
  • beforeMarshal(EventInterface $event, ArrayObject $data, ArrayObject $options)
  • afterMarshal(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • buildValidator(EventInterface $event, Validator $validator, string $name)
  • buildRules(RulesChecker $rules)
  • beforeRules(EventInterface $event, EntityInterface $entity, ArrayObject $options, string $operation)
  • afterRules(EventInterface $event, EntityInterface $entity, ArrayObject $options, bool $result, string $operation)
  • beforeSave(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • afterSave(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • afterSaveCommit(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • beforeDelete(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • afterDelete(EventInterface $event, EntityInterface $entity, ArrayObject $options)
  • afterDeleteCommit(EventInterface $event, EntityInterface $entity, ArrayObject $options)
命名空间: Cake\ORM
参见: \Cake\Event\EventManager 了解事件系统的参考。
链接: https://book.cakephp.com.cn/5/en/orm/table-objects.html#event-list

常量

  • string
    BUILD_VALIDATOR_EVENT ¶
    'Model.buildValidator'

    在构建验证器时分派的事件名称。

  • string
    DEFAULT_VALIDATOR ¶
    'default'

    默认验证集的名称。

  • class-stringCake\ORM\Rule\IsUnique>
    IS_UNIQUE_CLASS ¶
    IsUnique::class

    使用的 IsUnique 类名称。

  • class-stringCake\ORM\RulesChecker>
    RULES_CLASS ¶
    RulesChecker::class

    使用的规则类名称。

  • string
    VALIDATOR_PROVIDER_NAME ¶
    'table'

    此对象在验证器中分配的别名。

属性摘要

  • $_alias protected
    string|null

    给此特定实例赋予的名称。通过使用不同的别名,可以存在代表同一个数据库表的多个对象。

  • $_associations protected
    Cake\ORM\AssociationCollection

    此表的关联容器。

  • $_behaviors protected
    Cake\ORM\BehaviorRegistry

    此表的 BehaviorRegistry

  • $_connection protected
    Cake\Database\Connection|null

    连接实例

  • $_displayField protected
    list<string>|string|null

    表示行的人类可读表示形式的字段的名称

  • $_entityClass protected
    string|null

    代表此表单行的类的名称

  • $_eventClass protected
    string

    新事件对象的默认类名称。

  • $_eventManager protected
    Cake\Event\EventManagerInterface|null

    此对象用于分发内部事件的 Cake\Event\EventManager 实例。

  • $_primaryKey protected
    list<string>|string|null

    代表表中主键的字段的名称

  • $_registryAlias protected
    string|null

    用于创建此表对象的注册表键

  • $_rulesChecker protected
    Cake\Datasource\RulesChecker|null

    要应用于此表保存的实体的域规则

  • $_schema protected
    Cake\Database\Schema\TableSchemaInterface|null

    包含此表字段描述的架构对象

  • $_table protected
    string|null

    表在数据库中找到的名称

  • $_validatorClass protected
    string

    验证器类。

  • $_validators protected
    arrayCake\Validation\Validator>

    按名称索引的验证对象列表

  • $queryFactory protected
    QueryFactory

方法摘要

  • __call() public

    处理行为委托和动态查找器。

  • __construct() public

    初始化一个新的实例

  • __debugInfo() public

    返回一个数组,该数组可用于描述此对象的内部状态。

  • __get() public

    如果存在,则返回以传递的值命名的关联,否则抛出异常。

  • __isset() public

    返回此表是否存在以传递的值命名的关联。

  • _deleteMany() protected
  • _dynamicFinder() protected

    提供动态 findBy 和 findAllBy 方法。

  • _executeTransaction() protected

    处理在事务中执行工作程序的逻辑。

  • _getFindOrCreateQuery() protected

    获取 findOrCreate() 的查询对象。

  • _insert() protected

    辅助函数,用于处理在表中插入实体的数据

  • _newId() protected

    为新记录生成主键值。

  • _onSaveSuccess() protected

    在为该表成功保存实体后,处理子关联的保存并执行 afterSave 逻辑。

  • _processDelete() protected

    执行删除操作。

  • _processFindOrCreate() protected

    根据传递的选项,执行实体的实际查找和/或创建操作。

  • _processSave() protected

    根据传递的选项执行实体的实际保存操作。

  • _saveMany() protected
  • _setFieldMatchers() protected

    从选项数组中,检查$keys中描述的键是否为数组,并将这些键的值更改为闭包,这些闭包将在传递行时连接值数组中的每个属性。

  • _transactionCommitted() protected

    检查调用者是否已对事务执行了提交操作。

  • _update() protected

    辅助函数,用于处理在表中更新实体数据的操作。

  • addAssociations() public

    设置多个关联。

  • addBehavior() public

    添加一个行为。

  • addBehaviors() public

    将一组行为添加到表的行为集合中。

  • aliasField() public

    使用表的当前别名别名一个字段。

  • associations() public

    获取此表的关联集合。

  • behaviors() public

    返回此表的行为注册表。

  • belongsTo() public

    在当前表和目标表之间创建新的“属于”关联。 “属于”关联是 N-1 关系,其中当前表是 N 端,并且在当前表中的每条记录在目标表中都有一个关联记录。

  • belongsToMany() public

    在当前表和目标表之间创建新的“属于多个”关联。 “属于多个”关联是 M-N 关系。

  • buildRules() public

    在修改提供的 RulesChecker 对象后,返回该对象。

  • callFinder() public

    调用查找器方法并将其应用于传递的查询。

  • checkAliasLengths() protected

    检查用于查询的所有表名 + 列名组合是否符合数据库驱动程序允许的最大长度。

  • checkRules() public

    返回传递的实体是否符合存储在规则检查器中的所有规则。

  • createValidator() protected

    使用类中的自定义方法创建验证器。

  • defaultConnectionName() public static

    获取默认连接名称。

  • delete() public

    删除单个实体。

  • deleteAll() public

    删除与提供的条件匹配的所有记录。

  • deleteMany() public

    删除表中的多个实体。

  • deleteManyOrFail() public

    删除表中的多个实体。

  • deleteOrFail() public

    尝试删除实体,如果实体是新的,没有主键值,应用程序规则检查失败或删除被回调中止,则抛出 PersistenceFailedException。

  • deleteQuery() public

    创建一个新的删除查询。

  • dispatchEvent() public

    用于创建和分发事件的包装器。

  • exists() public

    如果此存储库中存在任何与指定条件匹配的记录,则返回 true。

  • find() public

    为当前存储库创建一个新的查询,并根据所选搜索类型应用一些默认值。

  • findAll() public

    按原样返回查询。

  • findAssociation() protected

    返回为指定别名(如果有)配置的关联对象。

  • findList() public

    设置查询对象,以便结果显示为索引数组,这在任何需要列表的地方(例如填充输入选择框)都很有用。

  • findOrCreate() public

    查找现有记录或创建一个新的记录。

  • findThreaded() public

    此查找器的结果将是嵌套数组,如果要使用模型数据的 parent_id 字段来构建嵌套结果,则适用。

  • get() public

    根据主键查找记录后返回单个记录,如果未找到记录,此方法将抛出异常。

  • getAlias() public

    返回表别名。

  • getAssociation() public

    返回为指定别名配置的关联对象。

  • getBehavior() public

    从注册表中获取行为。

  • getConnection() public

    返回连接实例。

  • getDisplayField() public

    返回显示字段。

  • getEntityClass() public

    返回用于为此表的水化行类。

  • getEventManager() public

    返回此对象的 Cake\Event\EventManager 管理器实例。

  • getPrimaryKey() public

    返回主键字段名。

  • getRegistryAlias() public

    返回用于创建此表实例的表注册表键。

  • getSchema() public

    返回描述此表属性的架构表对象。

  • getTable() public

    返回数据库表名。

  • getValidator() public

    返回标记为 $name 的验证规则。可以使用多个不同命名的验证集,这在需要从系统中的不同例程保存时使用不同规则时很有用。

  • hasAssociation() public

    检查此 Table 实例上是否存在特定关联。

  • hasBehavior() public

    检查是否已加载具有给定别名的行为。

  • hasField() public

    测试表是否具有特定字段/列。

  • hasFinder() public

    如果表存在查找器,则返回 true。

  • hasMany() public

    在当前表和目标表之间创建新的“具有多个”关联。 “具有多个”关联是 1-N 关系。

  • hasOne() public

    在当前表和目标表之间创建新的“具有一个”关联。 “具有一个”关联是 1-1 关系。

  • hasValidator() public

    检查是否已设置验证器。

  • implementedEvents() public

    获取此表感兴趣的模型回调。

  • initialize() public

    初始化表实例。在构造函数之后调用。

  • insertQuery() public

    创建一个新的插入查询。

  • invokeFinder() public
  • loadInto() public

    通过在数据库中执行额外的查询并将结果合并到相应的属性中,将指定的关联加载到传递的实体或实体列表中。

  • marshaller() public

    获取用于将数组数据编组/转换为对象的工具。

  • newEmptyEntity() public

    这将创建一个新的实体对象。

  • newEntities() public

    从数组创建一组实体 + 关联实体。

  • newEntity() public

    从数组创建一个新的实体 + 关联实体。

  • patchEntities() public

    将 $data 中传递的每个元素合并到 $entities 中找到的实体中,尊重实体上配置的可访问字段。合并是通过匹配 $data 和 $entities 中每个元素中的主键完成的。

  • patchEntity() public

    将传递的 $data 合并到 $entity 中,尊重实体上配置的可访问字段。在被更改后返回相同的实体。

  • query() public

    为表创建一个新的 SelectQuery 实例。

  • removeBehavior() public

    从此表的行为注册表中删除一个行为。

  • rulesChecker() public

    返回此实例的 RulesChecker。

  • save() public

    根据标记为脏的字段持久化实体,并在成功保存后返回相同的实体,或在出现任何错误的情况下返回 false。

  • saveMany() public

    持久化表中的多个实体。

  • saveManyOrFail() public

    持久化表中的多个实体。

  • saveOrFail() public

    尝试保存实体,如果应用程序规则检查失败,实体包含错误或保存被回调中止,则抛出 PersistenceFailedException。

  • selectQuery() public

    创建一个新的选择查询。

  • setAlias() public

    设置表别名。

  • setConnection() public

    设置连接实例。

  • setDisplayField() public

    设置显示字段。

  • setEntityClass() public

    设置用于为该表填充行的类。

  • setEventManager() public

    返回该对象的 Cake\Event\EventManagerInterface 实例。

  • setPrimaryKey() public

    设置主键字段名称。

  • setRegistryAlias() public

    设置用于创建该表实例的表注册表键。

  • setSchema() public

    设置描述该表属性的模式表对象。

  • setTable() public

    设置数据库表名。

  • setValidator() public

    此方法在给定名称下存储自定义验证器。

  • subquery() public

    创建一个新的 Query 实例,其中禁用字段自动别名。

  • updateAll() public

    更新所有匹配的记录。

  • updateQuery() public

    创建一个新的更新查询

  • validateUnique() public

    验证器方法,用于检查列中值的唯一性。这旨在与验证 API 一起使用,而不是直接调用。

  • validationDefault() public

    返回默认验证器对象。子类可以覆盖此函数以在验证器对象中添加默认验证集。

  • validationMethodExists() protected

    检查验证方法是否存在。

方法详细说明

__call() ¶ public

__call(string $method, array $args): mixed

处理行为委托和动态查找器。

如果您的 Table 使用任何行为,您可以像调用表对象一样调用它们。

参数
string $method

要调用的方法的名称

array $args

传递给函数的参数列表

返回
混合
抛出
BadMethodCallException

__construct() ¶ public

__construct(array<string, mixed> $config = [])

初始化一个新的实例

$config 数组理解以下键

  • table: 要表示的数据库表的名称
  • alias: 要分配给此表的别名(默认为表名)
  • connection: 要使用的连接实例
  • entityClass: 将表示该表中行的实体类的完全命名空间类名。
  • schema: 一个 \Cake\Database\Schema\TableSchemaInterface 对象或可以传递给它的数组。
  • eventManager: 用于内部事件的事件管理器实例
  • behaviors: 一个 BehaviorRegistry。通常不在测试之外使用。
  • associations: 一个 AssociationCollection 实例。
  • validator: 一个 Validator 实例,它被分配为“默认”验证集,或者是一个关联数组,其中键是验证集的名称,值是 Validator 实例。
参数
array<string, mixed> $config optional

此表的选项列表。

__debugInfo() ¶ public

__debugInfo(): array<string, mixed>

返回一个数组,该数组可用于描述此对象的内部状态。

返回
array<string, mixed>

__get() ¶ public

__get(string $property): Cake\ORM\Association

如果存在,则返回以传递的值命名的关联,否则抛出异常。

参数
string $property

关联名称

返回
Cake\ORM\Association
抛出
Cake\Database\Exception\DatabaseException
如果不存在具有此名称的关联

__isset() ¶ public

__isset(string $property): bool

返回此表是否存在以传递的值命名的关联。

参数
string $property

关联名称

返回
bool

_deleteMany() ¶ protected

_deleteMany(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): Cake\Datasource\EntityInterface|null
参数
iterableCake\Datasource\EntityInterface> $entities

要删除的实体。

array<string, mixed> $options optional

使用的选项。

返回
Cake\Datasource\EntityInterface|null

_dynamicFinder() ¶ protected

_dynamicFinder(string $method, array $args): Cake\ORM\Query\SelectQuery

提供动态 findBy 和 findAllBy 方法。

参数
string $method

触发的方法名称。

array $args

传递给函数的参数列表。

返回
Cake\ORM\Query\SelectQuery
抛出
BadMethodCallException
当存在缺失参数,或当 and 和 or 组合使用时。

_executeTransaction() ¶ protected

_executeTransaction(callable $worker, bool $atomic = true): mixed

处理在事务中执行工作程序的逻辑。

参数
callable $worker

将在事务中运行的工作人员。

bool $atomic optional

是否在数据库事务中执行工作人员。

返回
混合

_getFindOrCreateQuery() ¶ protected

_getFindOrCreateQuery(Cake\ORM\Query\SelectQuery|callable|array $search): Cake\ORM\Query\SelectQuery

获取 findOrCreate() 的查询对象。

参数
Cake\ORM\Query\SelectQuery|callable|array $search

通过它查找现有记录的条件。

返回
Cake\ORM\Query\SelectQuery

_insert() ¶ protected

_insert(Cake\Datasource\EntityInterface $entity, array $data): Cake\Datasource\EntityInterface|false

辅助函数,用于处理在表中插入实体的数据

参数
Cake\Datasource\EntityInterface $entity

从中提取 $data 的主体实体

array $data

需要保存的实际数据

返回
Cake\Datasource\EntityInterface|false
抛出
Cake\Database\Exception\DatabaseException
如果未提供所有主键,或者当表具有复合主键时无法生成主键。或者当表没有主键时。

_newId() ¶ protected

_newId(list<string> $primary): string|null

为新记录生成主键值。

默认情况下,这将使用类型系统来尽可能生成新的主键值。如果您的 ID 生成有特定要求,可以覆盖此方法。

注意:ORM 不会为复合主键生成主键值。您可以在表类中覆盖 _newId()。

参数
list<string> $primary

要获取新 ID 的主键列。

返回
string|null

_onSaveSuccess() ¶ protected

_onSaveSuccess(Cake\Datasource\EntityInterface $entity, ArrayObject<string, mixed> $options): bool

在为该表成功保存实体后,处理子关联的保存并执行 afterSave 逻辑。

参数
Cake\Datasource\EntityInterface $entity

要保存的实体

ArrayObject<string, mixed> $options

用于保存操作的选项

返回
bool
抛出
Cake\ORM\Exception\RolledbackTransactionException
如果在 afterSave 事件中中止了事务。

_processDelete() ¶ protected

_processDelete(Cake\Datasource\EntityInterface $entity, ArrayObject<string, mixed> $options): bool

执行删除操作。

将删除提供的实体。将从任何依赖关联中删除行,并清除 BelongsToMany 关联的连接表。

参数
Cake\Datasource\EntityInterface $entity

要删除的实体。

ArrayObject<string, mixed> $options

删除的选项。

返回
bool
抛出
InvalidArgumentException
如果传递的实体没有主键值

_processFindOrCreate() ¶ protected

_processFindOrCreate(Cake\ORM\Query\SelectQuery|callable|array $search, callable|null $callback = null, array<string, mixed> $options = []): Cake\Datasource\EntityInterface|array

根据传递的选项,执行实体的实际查找和/或创建操作。

参数
Cake\ORM\Query\SelectQuery|callable|array $search

通过它查找现有记录的条件,或者一个可调用的函数,它将自定义查找查询。

callable|null $callback optional

一个回调函数,将为新创建的实体调用。此回调函数将在实体持久化之前调用。

array<string, mixed> $options optional

保存时要使用的选项。

返回
Cake\Datasource\EntityInterface|array
抛出
Cake\ORM\Exception\PersistenceFailedException
当实体无法保存时
InvalidArgumentException

_processSave() ¶ protected

_processSave(Cake\Datasource\EntityInterface $entity, ArrayObject<string, mixed> $options): Cake\Datasource\EntityInterface|false

根据传递的选项执行实体的实际保存操作。

参数
Cake\Datasource\EntityInterface $entity

要保存的实体

ArrayObject<string, mixed> $options

用于保存操作的选项

返回
Cake\Datasource\EntityInterface|false
抛出
Cake\Database\Exception\DatabaseException
当实体缺少某些主键时。
Cake\ORM\Exception\RolledbackTransactionException
如果在 afterSave 事件中中止了事务。

_saveMany() ¶ protected

_saveMany(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): iterableCake\Datasource\EntityInterface>
参数
iterableCake\Datasource\EntityInterface> $entities

要保存的实体。

array<string, mixed> $options optional

为每个实体调用 Table::save() 时使用的选项。

返回
iterableCake\Datasource\EntityInterface>
抛出
Cake\ORM\Exception\PersistenceFailedException
如果实体无法保存。
异常
如果实体无法保存。

_setFieldMatchers() ¶ protected

_setFieldMatchers(array<string, mixed> $options, list<string> $keys): array<string, mixed>

从选项数组中,检查$keys中描述的键是否为数组,并将这些键的值更改为闭包,这些闭包将在传递行时连接值数组中的每个属性。

这是一个辅助函数,用于结果格式化程序,这些格式化程序在比较值时可以接受复合键。

参数
array<string, mixed> $options

传递给查找器的原始选项

list<string> $keys

要检查 $options 中的键,以从关联值构建匹配器

返回
array<string, mixed>

_transactionCommitted() ¶ protected

_transactionCommitted(bool $atomic, bool $primary): bool

检查调用者是否已对事务执行了提交操作。

参数
bool $atomic

如果使用了原子事务,则为 True。

bool $primary

如果使用了主键,则为 True。

返回
bool

_update() ¶ protected

_update(Cake\Datasource\EntityInterface $entity, array $data): Cake\Datasource\EntityInterface|false

辅助函数,用于处理在表中更新实体数据的操作。

参数
Cake\Datasource\EntityInterface $entity

从中提取 $data 的主体实体

array $data

需要保存的实际数据

返回
Cake\Datasource\EntityInterface|false
抛出
InvalidArgumentException
当主键数据缺失时。

addAssociations() ¶ public

addAssociations(array $params): $this

设置多个关联。

它接受一个数组作为参数,该数组包含按关联类型索引的表名集

$this->Posts->addAssociations([
  'belongsTo' => [
    'Users' => ['className' => 'App\Model\Table\UsersTable']
  ],
  'hasMany' => ['Comments'],
  'belongsToMany' => ['Tags']
]);

每个关联类型接受多个关联,其中键是别名,值是关联配置数据。如果使用数字键,则值将被视为关联别名。

参数
array $params

要绑定的关联集(按关联类型索引)

返回
$this
另请参见
\Cake\ORM\Table::belongsTo()
\Cake\ORM\Table::hasOne()
\Cake\ORM\Table::hasMany()
\Cake\ORM\Table::belongsToMany()

addBehavior() ¶ public

addBehavior(string $name, array<string, mixed> $options = []): $this

添加一个行为。

将行为添加到此表的行为集合中。行为提供了一种简单的方法来创建水平可重用的功能,这些功能可以提供类似特征的功能,并允许监听事件。

示例

加载行为,并设置一些设置。

$this->addBehavior('Tree', ['parent' => 'parentId']);

行为通常在 Table::initialize() 期间加载。

参数
string $name

行为的名称。可以是简短的类引用。

array<string, mixed> $options optional

行为要使用的选项。

返回
$this
抛出
RuntimeException
如果行为正在重新加载。
另请参见
\Cake\ORM\Behavior

addBehaviors() ¶ public

addBehaviors(array $behaviors): $this

将一组行为添加到表的行为集合中。

示例

$this->addBehaviors([
     'Timestamp',
     'Tree' => ['level' => 'level'],
]);
参数
array $behaviors

要加载的所有行为。

返回
$this
抛出
RuntimeException
如果行为正在重新加载。

aliasField() ¶ public

aliasField(string $field): string

使用表的当前别名别名一个字段。

如果字段已存在别名,则不会执行任何操作。

参数
string $field

要设置别名的字段。

返回
string

associations() ¶ public

associations(): Cake\ORM\AssociationCollection

获取此表的关联集合。

返回
Cake\ORM\AssociationCollection

behaviors() ¶ public

behaviors(): Cake\ORM\BehaviorRegistry

返回此表的行为注册表。

返回
Cake\ORM\BehaviorRegistry

belongsTo() ¶ public

belongsTo(string $associated, array<string, mixed> $options = []): Cake\ORM\Association\BelongsTo

在当前表和目标表之间创建新的“属于”关联。 “属于”关联是 N-1 关系,其中当前表是 N 端,并且在当前表中的每条记录在目标表中都有一个关联记录。

目标表可以通过其名称推断,该名称在第一个参数中提供,或者您可以传递要实例化的类名或直接传递该类的实例。

options 数组接受以下键

  • className: 目标表对象的类名
  • targetTable: 要用作目标表的表对象的实例
  • foreignKey: 要用作外键的字段的名称,如果为 false,则不会使用任何外键
  • conditions: 包含用于筛选连接的条件的数组
  • joinType: 要使用的连接类型(例如 INNER)
  • strategy: 要使用的加载策略。支持“join”和“select”。
  • finder: 从该关联加载记录时要使用的查找器方法。默认值为“all”。当策略为“join”时,只会使用查找器中的字段、包含项和 where 条件。

此方法将返回构建的关联对象。

参数
string $associated

目标表的别名。这用于唯一标识关联。

array<string, mixed> $options optional

用于配置关联定义的选项列表

返回
Cake\ORM\Association\BelongsTo

belongsToMany() ¶ public

belongsToMany(string $associated, array<string, mixed> $options = []): Cake\ORM\Association\BelongsToMany

在当前表和目标表之间创建新的“属于多个”关联。 “属于多个”关联是 M-N 关系。

目标表可以通过其名称推断,该名称在第一个参数中提供,或者您可以传递要实例化的类名或直接传递该类的实例。

options 数组接受以下键

  • className: 目标表对象的类名。
  • targetTable: 要用作目标表的表对象的实例。
  • foreignKey: 要用作外键的字段的名称。
  • targetForeignKey: 要用作目标外键的字段的名称。
  • joinTable: 表示两个表之间链接的表的名称
  • through: 如果您选择使用已实例化的链接表,请将此键设置为已配置的 Table 实例,该实例包含指向此关联中源表和目标表两者的关联。
  • dependent: 设置为 false,如果您不希望在删除拥有记录时删除连接表记录。
  • cascadeCallbacks: 设置为 true,如果您希望 CakePHP 在级联删除时触发回调。如果为 false,ORM 将使用 deleteAll() 删除数据。当为 true 时,将加载连接/连接表记录,然后删除它们。
  • conditions: 包含用于筛选连接的条件的数组。
  • sort: 此关联的结果应返回的顺序。
  • strategy: 用于选择结果的策略,可以是“select”或“subquery”。如果选择 subquery,则用于在源表中返回结果的查询将用作获取目标表中的行的条件。
  • saveStrategy: 可以是“append”或“replace”。指示用于保存关联实体的模式。前者只会创建关联关系两端之间的新链接,而后者将进行擦除和替换以在保存时创建传递实体之间的链接。
  • strategy: 要使用的加载策略。支持“select”和“subquery”。
  • finder: 从该关联加载记录时要使用的查找器方法。默认值为“all”。

此方法将返回构建的关联对象。

参数
string $associated

目标表的别名。这用于唯一标识关联。

array<string, mixed> $options optional

用于配置关联定义的选项列表

返回
Cake\ORM\Association\BelongsToMany

buildRules() ¶ public

buildRules(Cake\Datasource\RulesChecker $rules): Cake\ORM\RulesChecker

在修改提供的 RulesChecker 对象后,返回该对象。

子类应覆盖此方法以初始化要应用于此实例保存的实体的规则。

参数
Cake\Datasource\RulesChecker $rules

要修改的规则对象。

返回
Cake\ORM\RulesChecker

callFinder() ¶ public

callFinder(string $type, Cake\ORM\Query\SelectQuery<TSubject> $query, mixed ...$args): Cake\ORM\Query\SelectQuery<TSubject>

调用查找器方法并将其应用于传递的查询。

参数
string $type

要调用的查找器的名称。

Cake\ORM\Query\SelectQuery<TSubject> $query

要将查找器选项应用到的查询对象。

mixed ...$args

与查找器特定参数匹配的参数

返回
Cake\ORM\Query\SelectQuery<TSubject>
抛出
BadMethodCallException

checkAliasLengths() ¶ protected

checkAliasLengths(): void

检查用于查询的所有表名 + 列名组合是否符合数据库驱动程序允许的最大长度。

返回
void
抛出
Cake\Database\Exception\DatabaseException
当别名组合过长时

checkRules() ¶ public

checkRules(Cake\Datasource\EntityInterface $entity, string $operation = RulesChecker::CREATE, ArrayObject<string, mixed>|array|null $options = null): bool

返回传递的实体是否符合存储在规则检查器中的所有规则。

参数
Cake\Datasource\EntityInterface $entity

要检查有效性的实体。

string $operation optional

正在执行的操作。可以是“create”、“update”或“delete”。

ArrayObject<string, mixed>|array|null $options optional

要传递给规则的选项。

返回
bool

createValidator() ¶ protected

createValidator(string $name): Cake\Validation\Validator

使用类中的自定义方法创建验证器。

此方法仅用于构建新的验证器,它不会将验证器存储在您的对象中。如果您想构建和重用验证器,请使用 getValidator() 方法。

参数
string $name

要创建的验证集的名称。

返回
Cake\Validation\Validator
抛出
InvalidArgumentException

defaultConnectionName() ¶ public static

defaultConnectionName(): string

获取默认连接名称。

此方法用于在通过 TableLocator 创建实例而没有连接时获取回退连接名称。

返回
string
另请参见
\Cake\ORM\Locator\TableLocator::get()

delete() ¶ public

delete(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): bool

删除单个实体。

对于 HasMany 和 HasOne 关联,将根据 dependent 选项删除记录。BelongsToMany 关联中的连接表记录将始终被删除。您可以在定义关联时使用 cascadeCallbacks 选项来更改关联数据的删除方式。

选项

  • atomic 默认值为 true。当为 true 时,删除操作将在事务中发生。
  • checkRules 默认值为 true。在删除记录之前检查删除规则。

事件

  • Model.beforeDelete 在删除操作发生之前触发。如果停止,删除操作将被中止。接收事件、实体和选项。
  • Model.afterDelete 在删除操作成功后触发。接收事件、实体和选项。
  • Model.afterDeleteCommit 在原子删除的事务提交后触发。接收事件、实体和选项。

options 参数将转换为 \ArrayObject 实例,持续时间为回调,这允许侦听器修改删除操作中使用的选项。

参数
Cake\Datasource\EntityInterface $entity

要删除的实体。

array<string, mixed> $options optional

删除的选项。

返回
bool

deleteAll() ¶ public

deleteAll(Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions): int

删除与提供的条件匹配的所有记录。

此方法不会触发 beforeDelete/afterDelete 事件。如果您需要这些事件,请先加载记录集合并删除它们。

此方法不会在关联的 cascade 属性上执行。如果您需要级联删除并结合此方法使用,则应使用数据库外键 + ON CASCADE 规则。

参数
Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions

要使用的条件,接受 Query::where() 可以接受的任何内容。

返回
int

deleteMany() ¶ public

deleteMany(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): iterableCake\Datasource\EntityInterface>|false

删除表中的多个实体。

这些记录将在事务中删除,如果由于验证失败或数据库错误导致任何一条记录无法删除,则事务将回滚。

参数
iterableCake\Datasource\EntityInterface> $entities

要删除的实体。

array<string, mixed> $options optional

为每个实体调用 Table::save() 时使用的选项。

返回
iterableCake\Datasource\EntityInterface>|false
另请参见
\Cake\ORM\Table::delete() 用于与该方法相关的选项和事件。

deleteManyOrFail() ¶ public

deleteManyOrFail(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): iterableCake\Datasource\EntityInterface>

删除表中的多个实体。

这些记录将在事务中删除,如果由于验证失败或数据库错误导致任何一条记录无法删除,则事务将回滚。

参数
iterableCake\Datasource\EntityInterface> $entities

要删除的实体。

array<string, mixed> $options optional

为每个实体调用 Table::save() 时使用的选项。

返回
iterableCake\Datasource\EntityInterface>
抛出
Cake\ORM\Exception\PersistenceFailedException
另请参见
\Cake\ORM\Table::delete() 用于与该方法相关的选项和事件。

deleteOrFail() ¶ public

deleteOrFail(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): true

尝试删除实体,如果实体是新的,没有主键值,应用程序规则检查失败或删除被回调中止,则抛出 PersistenceFailedException。

参数
Cake\Datasource\EntityInterface $entity

要删除的实体。

array<string, mixed> $options optional

删除的选项。

返回
true
抛出
Cake\ORM\Exception\PersistenceFailedException
另请参见
\Cake\ORM\Table::delete()

deleteQuery() ¶ public

deleteQuery(): Cake\ORM\Query\DeleteQuery

创建一个新的删除查询。

返回
Cake\ORM\Query\DeleteQuery

dispatchEvent() ¶ public

dispatchEvent(string $name, array $data = [], TSubject|null $subject = null): Cake\Event\EventInterface<TSubject>

用于创建和分发事件的包装器。

返回已派发的事件。

参数
string $name

事件的名称。

array $data optional

您希望通过此事件传输的任何值,侦听器都可以读取它。

TSubject|null $subject optional

此事件适用的对象(默认情况下为 $this)。

返回
Cake\Event\EventInterface<TSubject>

exists() ¶ public

exists(QueryExpression|Closure|array|string|null $conditions): bool

如果此存储库中存在任何与指定条件匹配的记录,则返回 true。

参数
QueryExpression|Closure|array|string|null $conditions
返回
bool

find() ¶ public

find(string $type = 'all', mixed ...$args): Cake\ORM\Query\SelectQuery

为当前存储库创建一个新的查询,并根据所选搜索类型应用一些默认值。

Model.beforeFind 事件

每个 find() 将针对所有附加的侦听器触发 Model.beforeFind 事件。任何侦听器都可以使用 $query 设置有效的结果集。

默认情况下,以下特殊命名参数将被识别,用作选择查询选项

  • 字段
  • 条件
  • 排序
  • 限制
  • 偏移
  • 页码
  • 分组
  • 条件过滤
  • 包含
  • 关联

用法

$query = $articles->find('all',
  conditions: ['published' => 1],
  limit: 10,
  contain: ['Users', 'Comments']
);

使用构建器接口

$query = $articles->find()
  ->where(['published' => 1])
  ->limit(10)
  ->contain(['Users', 'Comments']);

调用查找器

find() 方法是自定义查找器方法的入口点。您可以通过指定类型来调用查找器。

这将调用 findPublished 方法

$query = $articles->find('published');

类型化查找器参数

查找器必须以 SelectQuery 实例作为其第一个参数,以及任何其他需要的参数。

在这里,查找器 “findByCategory” 有一个整数 $category 参数

function findByCategory(SelectQuery $query, int $category): SelectQuery
{
    return $query;
}

此查找器可以这样调用

$query = $articles->find('byCategory', $category);

或者使用命名参数作为

$query = $articles->find(type: 'byCategory', category: $category);
参数
string $type 可选

要执行的查询类型

mixed ...$args

与查找器特定参数匹配的参数

返回
Cake\ORM\Query\SelectQuery

findAll() ¶ public

findAll(Cake\ORM\Query\SelectQuery $query): Cake\ORM\Query\SelectQuery

按原样返回查询。

默认情况下 findAll() 不应用任何查询子句,您可以在子类中覆盖此方法来修改 find('all') 的工作方式。

参数
Cake\ORM\Query\SelectQuery $query

要查找的查询

返回
Cake\ORM\Query\SelectQuery

findAssociation() ¶ protected

findAssociation(string $name): Cake\ORM\Association|null

返回为指定别名(如果有)配置的关联对象。

name 参数也支持点语法来访问更深层的关联。

$users = $this->getAssociation('Articles.Comments.Users');
参数
string $name

关联使用的别名。

返回
Cake\ORM\Association|null

findList() ¶ public

findList(Cake\ORM\Query\SelectQuery $query, Closure|array|string|null $keyField = null, Closure|array|string|null $valueField = null, Closure|array|string|null $groupField = null, string $valueSeparator = ' '): Cake\ORM\Query\SelectQuery

设置查询对象,以便结果显示为索引数组,这在任何需要列表的地方(例如填充输入选择框)都很有用。

调用此查找器时,传递的字段用于确定使用什么作为数组键、值以及可选的将结果分组的方式。默认情况下,模型的主键用于键,显示字段用作值。

此查找器的结果将采用以下形式

[
 1 => 'value for id 1',
 2 => 'value for id 2',
 4 => 'value for id 4'
]

您可以指定哪个属性将用作键,哪个用作值,未指定时,它将分别使用调用 primaryKey 和 displayField 在此表中的结果

$table->find('list', keyField: 'name', valueField: 'age');

valueField 也可以是数组,在这种情况下,您还可以指定 valueSeparator 选项来控制如何连接值

$table->find('list',  valueField: ['first_name', 'last_name'], valueSeparator: ' | ');

此查找器的结果将采用以下形式

[
 1 => 'John | Doe',
 2 => 'Steve | Smith'
]

当结果共享一个属性时,可以将结果放在更大的组中,您可以通过设置 groupField 来自定义用于分组的属性

$table->find('list', groupField: 'category_id');

使用 groupField 时,结果将以这种格式返回

[
 'group_1' => [
     1 => 'value for id 1',
     2 => 'value for id 2',
 ]
 'group_2' => [
     4 => 'value for id 4'
 ]
]
参数
Cake\ORM\Query\SelectQuery $query

要查找的查询

Closure|array|string|null $keyField 可选
Closure|array|string|null $valueField 可选
Closure|array|string|null $groupField 可选
string $valueSeparator 可选
返回
Cake\ORM\Query\SelectQuery

findOrCreate() ¶ public

findOrCreate(Cake\ORM\Query\SelectQuery|callable|array $search, callable|null $callback = null, array<string, mixed> $options = []): Cake\Datasource\EntityInterface

查找现有记录或创建一个新的记录。

将执行 find() 以使用 $search 中定义的属性定位现有记录。如果记录与条件匹配,则将返回第一条记录。

如果找不到任何记录,将使用 $search 属性创建一个新的实体。如果提供了回调,它将被调用,允许您定义其他默认值。新实体将被保存并返回。

如果您的查找条件需要自定义排序、关联或条件,则 $search 参数可以是可调用函数,该函数将 Query 作为参数,或者作为 $search 参数传递的 \Cake\ORM\Query\SelectQuery 对象。允许您自定义查找结果。

选项

选项数组传递给 save 方法,除了以下键

  • atomic: 是否在数据库事务中执行 find、save 和回调的方法(默认:true)
  • defaults: 是否将搜索条件用作新实体的默认值(默认:true)
参数
Cake\ORM\Query\SelectQuery|callable|array $search

用于查找现有记录的条件。请注意,当您传递查询对象时,您必须使用该方法的第二个参数来修改实体数据,然后再保存。

callable|null $callback optional

一个回调函数,将为新创建的实体调用。此回调函数将在实体持久化之前调用。

array<string, mixed> $options optional

保存时要使用的选项。

返回
Cake\Datasource\EntityInterface
抛出
Cake\ORM\Exception\PersistenceFailedException
当实体无法保存时

findThreaded() ¶ public

findThreaded(Cake\ORM\Query\SelectQuery $query, Closure|array|string|null $keyField = null, Closure|array|string $parentField = 'parent_id', string $nestingKey = 'children'): Cake\ORM\Query\SelectQuery

此查找器的结果将是嵌套数组,如果要使用模型数据的 parent_id 字段来构建嵌套结果,则适用。

属于父行的值(基于它们的 parent_id 值)将使用 children 属性递归嵌套在父行值中

您可以自定义用于嵌套结果的字段,默认情况下使用主键和 parent_id 字段。如果您想更改这些默认值,您需要提供 keyField、parentField 或 nestingKey 参数

$table->find('threaded', keyField: 'id', parentField: 'ancestor_id', nestingKey: 'children');
参数
Cake\ORM\Query\SelectQuery $query

要查找的查询

Closure|array|string|null $keyField 可选

键字段的路径。

Closure|array|string $parentField 可选

父字段的路径。

string $nestingKey 可选

嵌套子节点的键。

返回
Cake\ORM\Query\SelectQuery

get() ¶ public

get(mixed $primaryKey, array|string $finder = 'all', Psr\SimpleCache\CacheInterface|string|null $cache = null, Closure|string|null $cacheKey = null, mixed ...$args): Cake\Datasource\EntityInterface

根据主键查找记录后返回单个记录,如果未找到记录,此方法将抛出异常。

用法

获取文章和一些关系

$article = $articles->get(1, ['contain' => ['Users', 'Comments']]);
参数
mixed $primaryKey

要查找的主键值

array|string $finder 可选

要使用的查找器。传递选项数组已弃用。

Psr\SimpleCache\CacheInterface|string|null $cache 可选

要使用的缓存配置。默认为 null,即不缓存。

Closure|string|null $cacheKey 可选

要使用的缓存键。如果未提供,则在 $cache 不为 null 时将自动生成。

mixed ...$args

查询选项或查找器特定参数的参数。

返回
Cake\Datasource\EntityInterface
抛出
Cake\Datasource\Exception\RecordNotFoundException
如果找不到具有此 ID 的记录
Cake\Datasource\Exception\InvalidPrimaryKeyException
当 $primaryKey 的元素数量不正确时。
另请参见
\Cake\Datasource\RepositoryInterface::find()

getAlias() ¶ public

getAlias(): string

返回表别名。

返回
string

getAssociation() ¶ public

getAssociation(string $name): Cake\ORM\Association

返回为指定别名配置的关联对象。

name 参数也支持点语法来访问更深层的关联。

$users = $this->getAssociation('Articles.Comments.Users');

请注意,此方法要求关联存在,否则将抛出异常。如果您不确定,请在调用此方法之前使用 hasAssociation()。

参数
string $name

关联使用的别名。

返回
Cake\ORM\Association
抛出
InvalidArgumentException

getBehavior() ¶ public

getBehavior(string $name): Cake\ORM\Behavior

从注册表中获取行为。

参数
string $name

要从注册表中获取的行为别名。

返回
Cake\ORM\Behavior
抛出
InvalidArgumentException
如果行为不存在。

getConnection() ¶ public

getConnection(): Cake\Database\Connection

返回连接实例。

返回
Cake\Database\Connection

getDisplayField() ¶ public

getDisplayField(): list<string>|string

返回显示字段。

返回
list<string>|string

getEntityClass() ¶ public

getEntityClass(): class-stringCake\Datasource\EntityInterface>

返回用于为此表的水化行类。

返回
class-stringCake\Datasource\EntityInterface>

getEventManager() ¶ public

getEventManager(): Cake\Event\EventManagerInterface

返回此对象的 Cake\Event\EventManager 管理器实例。

您可以使用此实例向对象事件注册任何新的监听器或回调,或者创建您自己的事件并随意触发它们。

返回
Cake\Event\EventManagerInterface

getPrimaryKey() ¶ public

getPrimaryKey(): list<string>|string

返回主键字段名。

返回
list<string>|string

getRegistryAlias() ¶ public

getRegistryAlias(): string

返回用于创建此表实例的表注册表键。

返回
string

getSchema() ¶ public

getSchema(): Cake\Database\Schema\TableSchemaInterface

返回描述此表属性的架构表对象。

返回
Cake\Database\Schema\TableSchemaInterface

getTable() ¶ public

getTable(): string

返回数据库表名。

这可能包括数据库架构名称(如果使用 setTable() 设置)。

返回
string

getValidator() ¶ public

getValidator(string|null $name = null): Cake\Validation\Validator

返回标记为 $name 的验证规则。可以使用多个不同命名的验证集,这在需要从系统中的不同例程保存时使用不同规则时很有用。

如果之前没有设置验证器,此方法将使用您类中的方法构建验证器。

例如,如果您希望创建一个名为 'forSubscription' 的验证集,您需要在您的 Table 子类中创建一个方法,如下所示

public function validationForSubscription($validator)
{
    return $validator
        ->add('email', 'valid-email', ['rule' => 'email'])
        ->add('password', 'valid', ['rule' => 'notBlank'])
        ->requirePresence('username');
}

$validator = $this->getValidator('forSubscription');

如果您希望有一个在没有指定其他集合的情况下适用的验证集,您可以在 Table 子类的 validationDefault 中实现该方法。

如果没有提供 $name 参数,则将返回默认验证器。您可以在 DEFAULT_VALIDATOR 类常量中配置默认验证器名称。

参数
string|null $name 可选

要返回的验证集的名称。

返回
Cake\Validation\Validator

hasAssociation() ¶ public

hasAssociation(string $name): bool

检查此 Table 实例上是否存在特定关联。

name 参数也支持点语法来访问更深层的关联。

$hasUsers = $this->hasAssociation('Articles.Comments.Users');
参数
string $name

关联使用的别名。

返回
bool

hasBehavior() ¶ public

hasBehavior(string $name): bool

检查是否已加载具有给定别名的行为。

参数
string $name

要检查的行为别名。

返回
bool

hasField() ¶ public

hasField(string $field): bool

测试表是否具有特定字段/列。

委托给架构对象,并使用 Schema\Table 实例检查列是否存在。

参数
string $field

要检查的字段。

返回
bool

hasFinder() ¶ public

hasFinder(string $type): bool

如果表存在查找器,则返回 true。

参数
string $type

要检查的查找器名称

返回
bool

hasMany() ¶ public

hasMany(string $associated, array<string, mixed> $options = []): Cake\ORM\Association\HasMany

在当前表和目标表之间创建新的“具有多个”关联。 “具有多个”关联是 1-N 关系。

目标表可以通过其名称推断,该名称在第一个参数中提供,或者您可以传递要实例化的类名或直接传递该类的实例。

options 数组接受以下键

  • className: 目标表对象的类名
  • targetTable: 要用作目标表的表对象的实例
  • foreignKey: 要用作外键的字段的名称,如果为 false,则不会使用任何外键
  • dependent: 如果您希望在从此表中删除实体时,CakePHP 将级联删除到关联表,则将其设置为 true。关联表上的删除操作不会进一步级联。要获得递归级联,也请启用 cascadeCallbacks。如果您不想让 CakePHP 删除关联数据,或者当您使用数据库约束时,请将其设置为 false。
  • cascadeCallbacks: 如果您希望 CakePHP 在级联删除时触发回调,则将其设置为 true。如果为 false,ORM 将使用 deleteAll() 来删除数据。当为 true 时,记录将被加载,然后删除。
  • conditions: 包含用于筛选连接的条件的数组
  • sort: 此关联结果返回的顺序
  • saveStrategy: “append” 或 “replace”。当为 “append” 时,当前记录将附加到数据库中的任何记录。当为 “replace” 时,当前集中不存在的关联记录将被删除。如果外键是可为空的列,或者如果 dependent 为 true,则记录将成为孤儿。
  • strategy: 用于选择结果的策略,可以是“select”或“subquery”。如果选择 subquery,则用于在源表中返回结果的查询将用作获取目标表中的行的条件。
  • finder: 从该关联加载记录时要使用的查找器方法。默认值为“all”。

此方法将返回构建的关联对象。

参数
string $associated

目标表的别名。这用于唯一标识关联。

array<string, mixed> $options optional

用于配置关联定义的选项列表

返回
Cake\ORM\Association\HasMany

hasOne() ¶ public

hasOne(string $associated, array<string, mixed> $options = []): Cake\ORM\Association\HasOne

在当前表和目标表之间创建新的“具有一个”关联。 “具有一个”关联是 1-1 关系。

目标表可以通过其名称推断,该名称在第一个参数中提供,或者您可以传递要实例化的类名或直接传递该类的实例。

options 数组接受以下键

  • className: 目标表对象的类名
  • targetTable: 要用作目标表的表对象的实例
  • foreignKey: 要用作外键的字段的名称,如果为 false,则不会使用任何外键
  • dependent: 如果您希望在从此表中删除实体时,CakePHP 将级联删除到关联表,则将其设置为 true。关联表上的删除操作不会进一步级联。要获得递归级联,也请启用 cascadeCallbacks。如果您不想让 CakePHP 删除关联数据,或者当您使用数据库约束时,请将其设置为 false。
  • cascadeCallbacks: 如果您希望 CakePHP 在级联删除时触发回调,则将其设置为 true。如果为 false,ORM 将使用 deleteAll() 来删除数据。当为 true 时,记录将被加载,然后删除。
  • conditions: 包含用于筛选连接的条件的数组
  • joinType: 要使用的连接类型(例如 LEFT)
  • strategy: 要使用的加载策略。支持“join”和“select”。
  • finder: 从该关联加载记录时要使用的查找器方法。默认值为“all”。当策略为“join”时,只会使用查找器中的字段、包含项和 where 条件。

此方法将返回构建的关联对象。

参数
string $associated

目标表的别名。这用于唯一标识关联。

array<string, mixed> $options optional

用于配置关联定义的选项列表

返回
Cake\ORM\Association\HasOne

hasValidator() ¶ public

hasValidator(string $name): bool

检查是否已设置验证器。

参数
string $name

验证器名称。

返回
bool

implementedEvents() ¶ public

implementedEvents(): array<string, mixed>

获取此表感兴趣的模型回调。

通过实现传统方法,假定表类对相关事件感兴趣。

如果您需要添加非传统事件监听器,或者您希望您的表监听非标准事件,请覆盖此方法。

传统方法映射为

  • Model.beforeMarshal => beforeMarshal
  • Model.afterMarshal => afterMarshal
  • Model.buildValidator => buildValidator
  • Model.beforeFind => beforeFind
  • Model.beforeSave => beforeSave
  • Model.afterSave => afterSave
  • Model.afterSaveCommit => afterSaveCommit
  • Model.beforeDelete => beforeDelete
  • Model.afterDelete => afterDelete
  • Model.afterDeleteCommit => afterDeleteCommit
  • Model.beforeRules => beforeRules
  • Model.afterRules => afterRules
返回
array<string, mixed>

initialize() ¶ public

initialize(array<string, mixed> $config): void

初始化表实例。在构造函数之后调用。

您可以使用此方法定义关联、附加行为、定义验证并执行您需要的任何其他初始化逻辑。

 public function initialize(array $config)
 {
     $this->belongsTo('Users');
     $this->belongsToMany('Tagging.Tags');
     $this->setPrimaryKey('something_else');
 }
参数
array<string, mixed> $config

传递给构造函数的配置选项

返回
void

insertQuery() ¶ public

insertQuery(): Cake\ORM\Query\InsertQuery

创建一个新的插入查询。

返回
Cake\ORM\Query\InsertQuery

invokeFinder() ¶ public

invokeFinder(Closure $callable, Cake\ORM\Query\SelectQuery<TSubject> $query, array $args): Cake\ORM\Query\SelectQuery<TSubject>
参数
Closure $callable

可调用对象。

Cake\ORM\Query\SelectQuery<TSubject> $query

查询对象。

array $args

可调用对象的参数。

返回
Cake\ORM\Query\SelectQuery<TSubject>

loadInto() ¶ public

loadInto(Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface> $entities, array $contain): Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>

通过在数据库中执行额外的查询并将结果合并到相应的属性中,将指定的关联加载到传递的实体或实体列表中。

示例

$user = $usersTable->get(1);
$user = $usersTable->loadInto($user, ['Articles.Tags', 'Articles.Comments']);
echo $user->articles[0]->title;

您也可以一次加载多个实体的关联

示例

$users = $usersTable->find()->where([...])->toList();
$users = $usersTable->loadInto($users, ['Articles.Tags', 'Articles.Comments']);
echo $user[1]->articles[0]->title;

要加载的关联的属性将在每个实体上被覆盖。

参数
Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface> $entities

单个实体或实体列表

array $contain

一个与 contain() 兼容的数组。

返回
Cake\Datasource\EntityInterface|arrayCake\Datasource\EntityInterface>
另请参见
\Cake\ORM\Query::contain()

marshaller() ¶ public

marshaller(): Cake\ORM\Marshaller

获取用于将数组数据编组/转换为对象的工具。

如果您希望表对象使用自定义编组逻辑,请覆盖此方法。

返回
Cake\ORM\Marshaller
另请参见
\Cake\ORM\Marshaller

newEmptyEntity() ¶ public

newEmptyEntity(): Cake\Datasource\EntityInterface

这将创建一个新的实体对象。

小心:这不会触发任何字段验证。此实体可以作为空记录持久化,而不会出现验证错误。在保存之前,请始终修补所需的字段。

返回
Cake\Datasource\EntityInterface

newEntities() ¶ public

newEntities(array $data, array<string, mixed> $options = []): arrayCake\Datasource\EntityInterface>

从数组创建一组实体 + 关联实体。

默认情况下,此表上的所有关联都将被填充。您可以使用 options 参数来限制哪些关联被构建,或包含更深层的关联

$articles = $this->Articles->newEntities(
  $this->request->getData(),
  ['associated' => ['Tags', 'Comments.Users']]
);

您可以通过传递 fields 选项来限制构建的实体中将出现的字段,该选项也适用于关联

$articles = $this->Articles->newEntities($this->request->getData(), [
 'fields' => ['title', 'body', 'tags', 'comments'],
 'associated' => ['Tags', 'Comments.Users' => ['fields' => 'username']]
 ]
);

您可以使用 Model.beforeMarshal 事件在请求数据转换为实体之前修改它。

参数
array $data

用于构建实体的数据。

array<string, mixed> $options optional

对象填充的选项列表。

返回
arrayCake\Datasource\EntityInterface>

newEntity() ¶ public

newEntity(array $data, array<string, mixed> $options = []): Cake\Datasource\EntityInterface

从数组创建一个新的实体 + 关联实体。

默认情况下,此表上的所有关联都将被填充。您可以使用 options 参数来限制哪些关联被构建,或包含更深层的关联

$article = $this->Articles->newEntity(
  $this->request->getData(),
  ['associated' => ['Tags', 'Comments.Users']]
);

您可以通过传递 fields 选项来限制构建的实体中将出现的字段,该选项也适用于关联

$article = $this->Articles->newEntity($this->request->getData(), [
 'fields' => ['title', 'body', 'tags', 'comments'],
 'associated' => ['Tags', 'Comments.Users' => ['fields' => 'username']]
]
);

fields 选项可以从最终进入实体的输入数据中删除或限制输入数据。如果您想放宽实体的默认可访问字段,可以使用 accessibleFields 选项

$article = $this->Articles->newEntity(
  $this->request->getData(),
  ['accessibleFields' => ['protected_field' => true]]
);

默认情况下,数据在传递给新实体之前会进行验证。如果字段无效,则这些字段不会出现在结果对象中。validate 选项可用于禁用对传递数据的验证

$article = $this->Articles->newEntity(
  $this->request->getData(),
  ['validate' => false]
);

您也可以在 validate 选项中传递要使用的验证器名称。如果将 null 传递给此函数的第一个参数,则不会执行任何验证。

您可以使用 Model.beforeMarshal 事件在请求数据转换为实体之前修改它。

参数
array $data

用于构建实体的数据。

array<string, mixed> $options optional

对象填充的选项列表。

返回
Cake\Datasource\EntityInterface
另请参见
\Cake\ORM\Marshaller::one()

patchEntities() ¶ public

patchEntities(iterableCake\Datasource\EntityInterface> $entities, array $data, array<string, mixed> $options = []): arrayCake\Datasource\EntityInterface>

将 $data 中传递的每个元素合并到 $entities 中找到的实体中,尊重实体上配置的可访问字段。合并是通过匹配 $data 和 $entities 中每个元素中的主键完成的。

无法与 $data 中的任何记录匹配的 $entities 中的这些条目将被丢弃。无法匹配的 $data 中的记录将被编组为新实体。

合并 HasMany 或 BelongsToMany 关联时,$data 数组中的所有实体都将出现,那些可以通过主键匹配的实体将获得数据合并,但那些无法匹配的实体将被丢弃。

您可以通过传递 fields 选项来限制合并的实体中将出现的字段,该选项也适用于关联

$articles = $this->Articles->patchEntities($articles, $this->request->getData(), [
 'fields' => ['title', 'body', 'tags', 'comments'],
 'associated' => ['Tags', 'Comments.Users' => ['fields' => 'username']]
 ]
);

您可以使用 Model.beforeMarshal 事件在请求数据转换为实体之前修改它。

参数
iterableCake\Datasource\EntityInterface> $entities

将获得数据合并的实体

array $data

要合并到实体中的数组列表

array<string, mixed> $options optional

对象填充的选项列表。

返回
arrayCake\Datasource\EntityInterface>

patchEntity() ¶ public

patchEntity(Cake\Datasource\EntityInterface $entity, array $data, array<string, mixed> $options = []): Cake\Datasource\EntityInterface

将传递的 $data 合并到 $entity 中,尊重实体上配置的可访问字段。在被更改后返回相同的实体。

合并 HasMany 或 BelongsToMany 关联时,$data 数组中的所有实体都将出现,那些可以通过主键匹配的实体将获得数据合并,但那些无法匹配的实体将被丢弃。

您可以通过传递 fields 选项来限制合并的实体中将出现的字段,该选项也适用于关联

$article = $this->Articles->patchEntity($article, $this->request->getData(), [
 'fields' => ['title', 'body', 'tags', 'comments'],
 'associated' => ['Tags', 'Comments.Users' => ['fields' => 'username']]
 ]
);
$article = $this->Articles->patchEntity($article, $this->request->getData(), [
  'associated' => [
    'Tags' => ['accessibleFields' => ['*' => true]]
  ]
]);

默认情况下,数据在传递给实体之前会进行验证。如果字段无效,则这些字段不会分配给实体。validate 选项可用于禁用对传递数据的验证

$article = $this->patchEntity($article, $this->request->getData(),[
 'validate' => false
]);

您可以使用 Model.beforeMarshal 事件在请求数据转换为实体之前修改它。

修补标量值(null/boolean/string/integer/float)时,如果属性目前具有相同的值,则不会调用 setter,并且属性不会被标记为脏。这是一个优化,用于在持久化实体时防止不必要的字段更新。

参数
Cake\Datasource\EntityInterface $entity

将获得数据合并的实体

array $data

要合并到实体中的键值字段列表

array<string, mixed> $options optional

对象填充的选项列表。

返回
Cake\Datasource\EntityInterface
另请参见
\Cake\ORM\Marshaller::merge()

query() ¶ public

query(): Cake\ORM\Query\SelectQuery

为表创建一个新的 SelectQuery 实例。

返回
Cake\ORM\Query\SelectQuery

removeBehavior() ¶ public

removeBehavior(string $name): $this

从此表的行为注册表中删除一个行为。

示例

从此表中删除行为。

$this->removeBehavior('Tree');
参数
string $name

行为添加时的别名。

返回
$this
另请参见
\Cake\ORM\Behavior

rulesChecker() ¶ public

rulesChecker(): Cake\Datasource\RulesChecker

返回此实例的 RulesChecker。

RulesChecker 对象用于测试实体的规则有效性,这些规则可能涉及复杂的逻辑或需要从相关数据源中获取的数据。

返回
Cake\Datasource\RulesChecker
另请参见
\Cake\Datasource\RulesChecker

save() ¶ public

save(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): Cake\Datasource\EntityInterface|false

根据标记为脏的字段持久化实体,并在成功保存后返回相同的实体,或在出现任何错误的情况下返回 false。

选项

options 数组接受以下键

  • atomic: 是否在数据库事务中执行保存和回调(默认值:true)
  • checkRules: 是否在保存之前检查实体上的规则,如果检查失败,则会中止保存操作。(默认值:true)
  • associated: 如果 true,则在将与关联定义的属性标记为脏时,将保存传递的 $entity 中找到的一级关联实体。如果是一个数组,它将被解释为要保存的关联列表。通过将自定义选项设为数组值,可以使用此键为关联表对象上的保存提供不同的选项。如果为 false,则不会保存任何关联记录。(默认值: true)
  • checkExisting: 是否检查实体是否已存在,假设实体被标记为非新实体,并且主键已设置。

事件

保存时,此方法将触发四个事件

  • Model.beforeRules: 如果 $options 中的 checkRules 键未设置为 false,则在对传递的实体进行任何规则检查之前触发。侦听器将接收实体、选项数组和操作类型作为参数。如果事件被停止,规则检查结果将被设置为事件本身的结果。
  • Model.afterRules: 在对实体调用 checkRules() 方法后立即触发。侦听器将接收实体、选项数组、检查规则的结果和操作类型作为参数。如果事件被停止,检查结果将被设置为事件本身的结果。
  • Model.beforeSave: 在计算要持久化的字段列表之前立即触发。它接收实体和选项作为参数。选项数组被传递为 ArrayObject,因此其中的任何更改都会反映在每个侦听器中,并在事件结束时被记住,以便它可以用于保存操作的其余部分。在任何侦听器中返回 false 将中止保存过程。如果使用事件 API 停止事件,事件对象的 result 属性将被返回。当在侦听器中实现自己的保存策略时,这非常有用。
  • Model.afterSave: 在成功插入或保存后触发,侦听器将接收实体和选项数组作为参数。执行的操作类型(插入或更新)可以通过检查实体的方法 isNew 来确定,true 表示插入,false 表示更新。
  • Model.afterSaveCommit: 在为原子保存提交事务后触发,侦听器将接收实体和选项数组作为参数。

此方法将确定传递的实体是否需要在数据库中插入或更新。它通过检查实体上的 isNew 方法来做到这一点。如果要保存的实体从其 errors() 方法返回非空值,则不会保存它。

在关联表上保存

默认情况下,此方法将持久化属于关联表的实体,只要与在此表中为关联设置的属性名称匹配的脏属性。可以控制要保存哪些关联,并为保存它们传递其他选项。

// Only save the comments association
$articles->save($entity, ['associated' => ['Comments']]);

// Save the company, the employees and related addresses for each of them.
// For employees do not check the entity rules
$companies->save($entity, [
  'associated' => [
    'Employees' => [
      'associated' => ['Addresses'],
      'checkRules' => false
    ]
  ]
]);

// Save no associations
$articles->save($entity, ['associated' => false]);
参数
Cake\Datasource\EntityInterface $entity

要保存的实体

array<string, mixed> $options optional

保存时要使用的选项。

返回
Cake\Datasource\EntityInterface|false
抛出
Cake\ORM\Exception\RolledbackTransactionException
如果在 afterSave 事件中中止了事务。

saveMany() ¶ public

saveMany(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): iterableCake\Datasource\EntityInterface>|false

持久化表中的多个实体。

记录将在事务中保存,如果任何一个记录由于验证失败或数据库错误而无法保存,则事务将回滚。

参数
iterableCake\Datasource\EntityInterface> $entities

要保存的实体。

array<string, mixed> $options optional

为每个实体调用 Table::save() 时使用的选项。

返回
iterableCake\Datasource\EntityInterface>|false
抛出
异常

saveManyOrFail() ¶ public

saveManyOrFail(iterableCake\Datasource\EntityInterface> $entities, array<string, mixed> $options = []): iterableCake\Datasource\EntityInterface>

持久化表中的多个实体。

记录将在事务中保存,如果任何一个记录由于验证失败或数据库错误而无法保存,则事务将回滚。

参数
iterableCake\Datasource\EntityInterface> $entities

要保存的实体。

array<string, mixed> $options optional

为每个实体调用 Table::save() 时使用的选项。

返回
iterableCake\Datasource\EntityInterface>
抛出
异常

Cake\ORM\Exception\PersistenceFailedException
如果实体无法保存。

saveOrFail() ¶ public

saveOrFail(Cake\Datasource\EntityInterface $entity, array<string, mixed> $options = []): Cake\Datasource\EntityInterface

尝试保存实体,如果应用程序规则检查失败,实体包含错误或保存被回调中止,则抛出 PersistenceFailedException。

参数
Cake\Datasource\EntityInterface $entity

要保存的实体

array<string, mixed> $options optional

保存时要使用的选项。

返回
Cake\Datasource\EntityInterface
抛出
Cake\ORM\Exception\PersistenceFailedException
当实体无法保存时
另请参见
\Cake\ORM\Table::save()

selectQuery() ¶ public

selectQuery(): Cake\ORM\Query\SelectQuery

创建一个新的选择查询。

返回
Cake\ORM\Query\SelectQuery

setAlias() ¶ public

setAlias(string $alias): $this

设置表别名。

参数
string $alias

表别名

返回
$this

setConnection() ¶ public

setConnection(Cake\Database\Connection $connection): $this

设置连接实例。

参数
Cake\Database\Connection $connection

连接实例

返回
$this

setDisplayField() ¶ public

setDisplayField(list<string>|string $field): $this

设置显示字段。

参数
list<string>|string $field

用作显示字段的名称。

返回
$this

setEntityClass() ¶ public

setEntityClass(string $name): $this

设置用于为该表填充行的类。

参数
string $name

要使用的类的名称

返回
$this
抛出
Cake\ORM\Exception\MissingEntityException
当找不到实体类时

setEventManager() ¶ public

setEventManager(Cake\Event\EventManagerInterface $eventManager): $this

返回该对象的 Cake\Event\EventManagerInterface 实例。

您可以使用此实例向对象事件注册任何新的监听器或回调,或者创建您自己的事件并随意触发它们。

参数
Cake\Event\EventManagerInterface $eventManager

要设置的事件管理器

返回
$this

setPrimaryKey() ¶ public

setPrimaryKey(list<string>|string $key): $this

设置主键字段名称。

参数
list<string>|string $key

设置一个新的名称作为主键

返回
$this

setRegistryAlias() ¶ public

setRegistryAlias(string $registryAlias): $this

设置用于创建该表实例的表注册表键。

参数
string $registryAlias

用于访问此对象的键。

返回
$this

setSchema() ¶ public

setSchema(Cake\Database\Schema\TableSchemaInterface|array $schema): $this

设置描述该表属性的模式表对象。

如果传递了一个数组,则将使用它构造一个新的 TableSchemaInterface 并用作此表的模式。

参数
Cake\Database\Schema\TableSchemaInterface|array $schema

要用于此表的模式

返回
$this

setTable() ¶ public

setTable(string $table): $this

设置数据库表名。

这可以包括数据库模式名称,形式为“schema.table”。如果名称必须被引用,请启用自动标识符引用。

参数
string $table

表名。

返回
$this

setValidator() ¶ public

setValidator(string $name, Cake\Validation\Validator $validator): $this

此方法在给定名称下存储自定义验证器。

您可以自己构建对象并将其存储在您的对象中

$validator = new \Cake\Validation\Validator();
$validator
    ->add('email', 'valid-email', ['rule' => 'email'])
    ->add('password', 'valid', ['rule' => 'notBlank'])
    ->allowEmpty('bio');
$this->setValidator('forSubscription', $validator);
参数
string $name

要设置的验证器的名称。

Cake\Validation\Validator $validator

要设置的验证器对象。

返回
$this

subquery() ¶ public

subquery(): Cake\ORM\Query\SelectQuery

创建一个新的 Query 实例,其中禁用字段自动别名。

这对于子查询很有用。

返回
Cake\ORM\Query\SelectQuery

updateAll() ¶ public

updateAll(Cake\Database\Expression\QueryExpressionClosure|array|string $fields, Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions): int

更新所有匹配的记录。

根据 $conditions 将 $fields 设置为提供的值。此方法不会触发 beforeSave/afterSave 事件。如果需要这些事件,请先加载一个记录集合并更新它们。

参数
Cake\Database\Expression\QueryExpressionClosure|array|string $fields

字段 => 新值的哈希。

Cake\Database\Expression\QueryExpressionClosure|array|string|null $conditions

要使用的条件,接受 Query::where() 中的任何内容。

返回
int

updateQuery() ¶ public

updateQuery(): Cake\ORM\Query\UpdateQuery

创建一个新的更新查询

返回
Cake\ORM\Query\UpdateQuery

validateUnique() ¶ public

validateUnique(mixed $value, array<string, mixed> $options, array|null $context = null): bool

验证器方法,用于检查列中值的唯一性。这旨在与验证 API 一起使用,而不是直接调用。

示例

$validator->add('email', [
 'unique' => ['rule' => 'validateUnique', 'provider' => 'table']
])

唯一性验证可以限定为另一个列的值

$validator->add('email', [
 'unique' => [
     'rule' => ['validateUnique', ['scope' => 'site_id']],
     'provider' => 'table'
 ]
]);

在上面的示例中,电子邮件唯一性将限定为仅具有相同 site_id 的行。仅当限定字段存在于要验证的数据中时,才会使用限定。

参数
mixed $value

要检查唯一性的列的值。

array<string, mixed> $options

选项数组,可选地包含“scope”键。也可能是验证上下文,如果没有选项。

array|null $context optional

验证上下文或 null。

返回
bool

validationDefault() ¶ public

validationDefault(Cake\Validation\Validator $validator): Cake\Validation\Validator

返回默认验证器对象。子类可以覆盖此函数以在验证器对象中添加默认验证集。

参数
Cake\Validation\Validator $validator

可以修改以向其添加一些规则的验证器。

返回
Cake\Validation\Validator

validationMethodExists() ¶ protected

validationMethodExists(string $name): bool

检查验证方法是否存在。

参数
string $name
返回
bool

属性详情

$_alias ¶ protected

给此特定实例赋予的名称。通过使用不同的别名,可以存在代表同一个数据库表的多个对象。

类型
string|null

$_associations ¶ protected

此表的关联容器。

类型
Cake\ORM\AssociationCollection

$_behaviors ¶ protected

此表的 BehaviorRegistry

类型
Cake\ORM\BehaviorRegistry

$_connection ¶ 受保护的

连接实例

类型
Cake\Database\Connection|null

$_displayField ¶ 受保护的

表示行的人类可读表示形式的字段的名称

类型
list<string>|string|null

$_entityClass ¶ 受保护的

代表此表单行的类的名称

类型
string|null

$_eventClass ¶ 受保护的

新事件对象的默认类名称。

类型
string

$_eventManager ¶ 受保护的

此对象用于分发内部事件的 Cake\Event\EventManager 实例。

类型
Cake\Event\EventManagerInterface|null

$_primaryKey ¶ 受保护的

代表表中主键的字段的名称

类型
list<string>|string|null

$_registryAlias ¶ 受保护的

用于创建此表对象的注册表键

类型
string|null

$_rulesChecker ¶ 受保护的

要应用于此表保存的实体的域规则

类型
Cake\Datasource\RulesChecker|null

$_schema ¶ 受保护的

包含此表字段描述的架构对象

类型
Cake\Database\Schema\TableSchemaInterface|null

$_table ¶ 受保护的

表在数据库中找到的名称

类型
string|null

$_validatorClass ¶ 受保护的

验证器类。

类型
string

$_validators ¶ 受保护的

按名称索引的验证对象列表

类型
arrayCake\Validation\Validator>

$queryFactory ¶ 受保护的

类型
QueryFactory
OpenHub
Pingping
Linode
  • 商业解决方案
  • 展示
  • 文档
  • 手册
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识和商标
  • 社区
  • 参与
  • 问题 (Github)
  • Bakery
  • 特色资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 新闻简报
  • Linkedin
  • YouTube
  • Facebook
  • Twitter
  • Mastodon
  • 帮助和支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API 文档 生成