CakePHP
  • 文档
    • 手册
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识 & 商标
  • 商业解决方案
  • 周边产品
  • 公路旅行
  • 团队
  • 社区
    • 社区
    • 参与
    • 问题 (Github)
    • 烘焙坊
    • 精选资源
    • 培训
    • 聚会
    • 我的 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
      • 关联
      • 行为
        • 翻译
      • 异常
      • 定位器
      • 查询
      • 规则
    • 路由
    • 测试套件
    • 实用程序
    • 验证
    • 视图

类 TreeBehavior

使附加此行为的表表现得像一个嵌套集,并提供用于管理和检索派生层次结构信息的方法。

附加此行为的表需要有一个引用父行的列,以及两个其他数值列(lft 和 rght),其中隐式顺序将被缓存。

有关嵌套集及其工作原理的更多信息,请参阅 https://www.sitepoint.com/hierarchical-data-database-2/

命名空间: Cake\ORM\Behavior

属性摘要

  • $_config protected
    array<string, mixed>

    运行时配置

  • $_configInitialized protected
    bool

    配置属性是否已使用默认值进行配置

  • $_defaultConfig protected
    array<string, mixed>

    默认配置

  • $_primaryKey protected
    string

    表主键中第一列的缓存副本。

  • $_reflectionCache protected static
    array<string, array>

    行为的反射方法缓存。

  • $_table protected
    Cake\ORM\Table

    表实例。

方法摘要

  • __construct() public

    构造函数

  • _configDelete() protected

    删除单个配置键。

  • _configRead() protected

    读取配置键。

  • _configWrite() protected

    写入配置键。

  • _ensureFields() protected

    确保提供的实体包含左列和右列的非空值

  • _getMax() protected

    返回表中最大索引值。

  • _getNode() protected

    从树中返回单个节点及其主键

  • _getPrimaryKey() protected

    返回一个表示附加表的primaryKey的单个字符串值

  • _moveDown() protected

    用于 moveDown 的实际代码的辅助函数

  • _moveUp() protected

    用于 moveUp 的实际代码的辅助函数

  • _recoverTree() protected

    用于恢复树的单个级别的递归方法

  • _reflectionCache() protected

    获取此行为实现的方法

  • _removeFromTree() protected

    包含 removeFromTree 的实际代码的辅助函数

  • _resolveMethodAliases() protected

    删除别名方法,这些方法否则将被用户配置重复。

  • _scope() protected

    更改传递的查询,使其仅返回树配置中定义的范围记录。

  • _setAsRoot() protected

    更新传递的实体的左列和右列,以便可以将其设置为树中的新根。它还会修改树中其余部分的排序,以便结构保持有效

  • _setChildrenLevel() protected

    设置后代的级别。

  • _setParent() protected

    设置传递的实体的正确左列和右列值,以便可以将其更新到新父级。它还会在树中创建空洞,以便在不破坏结构的情况下完成节点移动。

  • _sync() protected

    辅助函数,用于根据传递的条件自动更改左列和右列的值,这两个值的更改量相同。

  • _unmarkInternalTree() protected

    辅助方法,用于反转小于 0 的左列和右列的符号。它们在之前被设置为负值,因此在执行其他树转换时它们的绝对值不会改变。

  • afterSave() public

    保存后监听器。

  • beforeDelete() public

    还会删除要删除的实体子树中的节点

  • beforeSave() public

    保存前监听器。如果要保存的参数中包含父列,则会透明地管理 lft 和 rght 字段的设置。

  • childCount() public

    获取子节点的数量。

  • configShallow() public

    将提供的配置与现有配置合并。与 config() 不同,config() 对嵌套键执行递归合并,此方法执行简单合并。

  • findChildren() public

    获取当前模型的子节点。

  • findPath() public

    自定义查找器方法,可用于返回从树的根到特定节点的节点列表。此自定义查找器要求选项中传递键 'for',其中包含要获取其路径的节点的 id。

  • findTreeList() public

    获取树中元素的表示形式,作为一个扁平列表,其中键是表的主键,值是表的显示字段。值带有前缀,以便在视觉上指示树中的相对深度。

  • formatTreeList() public

    将查询格式化为扁平列表,其中键是表的主键,值是表的显示字段。值带有前缀,以便在视觉上指示树中的相对深度。

  • getConfig() public

    返回配置。

  • getConfigOrFail() public

    返回此特定键的配置。

  • getLevel() public

    返回树中节点的深度级别。

  • implementedEvents() public

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

  • implementedFinders() public

    implementedFinders

  • implementedMethods() public

    implementedMethods

  • initialize() public

    构造函数钩子方法。

  • moveDown() public

    重新排序节点,而不改变父级。

  • moveUp() public

    重新排序节点,而不改变其父级。

  • recover() public

    从父列定义的层次结构中恢复 lft 和 right 列的值。

  • removeFromTree() public

    通过将当前节点定位为新的根并将所有子节点向上重新父级一层来从树中删除当前节点。

  • setConfig() public

    设置配置。

  • table() public

    获取此行为绑定的表实例。

  • verifyConfig() public

    verifyConfig

方法详细信息

__construct() ¶ public

__construct(Cake\ORM\Table $table, array<string, mixed> $config = [])

构造函数

将配置与默认值合并并存储在配置属性中

参数
Cake\ORM\Table $table

此行为附加的表。

array<string, mixed> $config optional

此行为的配置。

_configDelete() ¶ protected

_configDelete(string $key): void

删除单个配置键。

参数
string $key

要删除的键。

返回值
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置

_configRead() ¶ protected

_configRead(string|null $key): mixed

读取配置键。

参数
string|null $key

要读取的键。

返回值
混合

_configWrite() ¶ protected

_configWrite(array<string, mixed>|string $key, mixed $value, string|bool $merge = false): void

写入配置键。

参数
array<string, mixed>|string $key

要写入的键。

混合 $value

要写入的值。

字符串|布尔值 $merge 可选

如果为 true 则递归合并,'shallow' 表示简单合并,false 表示覆盖,默认为 false。

返回值
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置

_ensureFields() ¶ 受保护

_ensureFields(Cake\Datasource\EntityInterface $entity): void

确保提供的实体包含左列和右列的非空值

参数
Cake\Datasource\EntityInterface $entity

要确保字段的实体

返回值
void

_getMax() ¶ 受保护

_getMax(): int

返回表中最大索引值。

返回值
int

_getNode() ¶ 受保护

_getNode(mixed $id): Cake\Datasource\EntityInterface

从树中返回单个节点及其主键

参数
混合 $id

记录 ID。

返回值
Cake\Datasource\EntityInterface
抛出
Cake\Datasource\Exception\RecordNotFoundException
当节点未找到时

_getPrimaryKey() ¶ 受保护

_getPrimaryKey(): string

返回一个表示附加表的primaryKey的单个字符串值

返回值
string

_moveDown() ¶ 受保护

_moveDown(Cake\Datasource\EntityInterface $node, int|true $number): Cake\Datasource\EntityInterface

用于 moveDown 的实际代码的辅助函数

参数
Cake\Datasource\EntityInterface $node

要移动的节点

int|true $number

要移动节点的位置数,或 true 表示移动到最后一个位置

返回值
Cake\Datasource\EntityInterface
抛出
Cake\Datasource\Exception\RecordNotFoundException
当节点未找到时

_moveUp() ¶ 受保护

_moveUp(Cake\Datasource\EntityInterface $node, int|true $number): Cake\Datasource\EntityInterface

用于 moveUp 的实际代码的辅助函数

参数
Cake\Datasource\EntityInterface $node

要移动的节点

int|true $number

要移动节点的位置数,或 true 表示移动到第一个位置

返回值
Cake\Datasource\EntityInterface
抛出
Cake\Datasource\Exception\RecordNotFoundException
当节点未找到时

_recoverTree() ¶ 受保护

_recoverTree(int $lftRght = 1, mixed $parentId = null, int $level = 0): int

用于恢复树的单个级别的递归方法

参数
int $lftRght 可选

开始的 lft/rght 值

混合 $parentId 可选

要恢复的级别的父 ID

int $level 可选

节点级别

返回值
int

_reflectionCache() ¶ 受保护

_reflectionCache(): array

获取此行为实现的方法

使用 implementedEvents() 方法排除回调方法。以 _ 开头的将被忽略,Cake\ORM\Behavior 上声明的方法也是如此

返回值
数组
抛出
ReflectionException

_removeFromTree() ¶ 受保护

_removeFromTree(Cake\Datasource\EntityInterface $node): Cake\Datasource\EntityInterface|false

包含 removeFromTree 的实际代码的辅助函数

参数
Cake\Datasource\EntityInterface $node

要从树中移除的节点

返回值
Cake\Datasource\EntityInterface|false

_resolveMethodAliases() ¶ 受保护

_resolveMethodAliases(string $key, array<string, mixed> $defaults, array<string, mixed> $config): array

删除别名方法,这些方法否则将被用户配置重复。

参数
string $key

要过滤的键。

array<string, mixed> $defaults

默认方法映射。

array<string, mixed> $config

自定义方法映射。

返回值
数组

_scope() ¶ 受保护

_scope(Cake\ORM\Query\SelectQueryCake\ORM\Query\UpdateQueryCake\ORM\Query\DeleteQuery $query): Cake\ORM\Query\SelectQueryCake\ORM\Query\UpdateQueryCake\ORM\Query\DeleteQuery

更改传递的查询,使其仅返回树配置中定义的范围记录。

参数
Cake\ORM\Query\SelectQueryCake\ORM\Query\UpdateQueryCake\ORM\Query\DeleteQuery $query

要修改的查询

返回值
Cake\ORM\Query\SelectQueryCake\ORM\Query\UpdateQueryCake\ORM\Query\DeleteQuery

_setAsRoot() ¶ 受保护

_setAsRoot(Cake\Datasource\EntityInterface $entity): void

更新传递的实体的左列和右列,以便可以将其设置为树中的新根。它还会修改树中其余部分的排序,以便结构保持有效

参数
Cake\Datasource\EntityInterface $entity

要设置为新根的实体

返回值
void

_setChildrenLevel() ¶ 受保护

_setChildrenLevel(Cake\Datasource\EntityInterface $entity): void

设置后代的级别。

参数
Cake\Datasource\EntityInterface $entity

其子孙需要更新的实体。

返回值
void

_setParent() ¶ 受保护

_setParent(Cake\Datasource\EntityInterface $entity, mixed $parent): void

设置传递的实体的正确左列和右列值,以便可以将其更新到新父级。它还会在树中创建空洞,以便在不破坏结构的情况下完成节点移动。

参数
Cake\Datasource\EntityInterface $entity

要重新设置父级的实体

混合 $parent

要设置的父级 ID

返回值
void
抛出
Cake\Database\Exception\DatabaseException
如果要设置到实体的父级无效

_sync() ¶ 受保护

_sync(int $shift, string $dir, string $conditions, bool $mark = false): void

辅助函数,用于根据传递的条件自动更改左列和右列的值,这两个值的更改量相同。

参数
int $shift

用于操作左列和右列的值

字符串 $dir

用于移位值的运算符 (+/-)

字符串 $conditions

用于将左或右与之进行比较的 SQL 代码片段。

布尔值 $mark 可选

是否标记更新的值,以便将来调用此函数不会修改它们。

返回值
void

_unmarkInternalTree() ¶ 受保护

_unmarkInternalTree(): void

辅助方法,用于反转小于 0 的左列和右列的符号。它们在之前被设置为负值,因此在执行其他树转换时它们的绝对值不会改变。

返回值
void

afterSave() ¶ 公共

afterSave(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\Datasource\EntityInterface $entity): void

保存后监听器。

管理当前保存的实体的后代级别的更新。

参数
Cake\Event\EventInterfaceCake\ORM\Table> $event

触发的 afterSave 事件

Cake\Datasource\EntityInterface $entity

要保存的实体

返回值
void

beforeDelete() ¶ 公共

beforeDelete(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\Datasource\EntityInterface $entity): void

还会删除要删除的实体子树中的节点

参数
Cake\Event\EventInterfaceCake\ORM\Table> $event

触发的 beforeDelete 事件

Cake\Datasource\EntityInterface $entity

要保存的实体

返回值
void

beforeSave() ¶ 公共

beforeSave(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\Datasource\EntityInterface $entity): void

保存前监听器。如果要保存的参数中包含父列,则会透明地管理 lft 和 rght 字段的设置。

参数
Cake\Event\EventInterfaceCake\ORM\Table> $event

触发的 beforeSave 事件

Cake\Datasource\EntityInterface $entity

要保存的实体

返回值
void
抛出
Cake\Database\Exception\DatabaseException
如果要为节点设置的父级无效

childCount() ¶ 公共

childCount(Cake\Datasource\EntityInterface $node, bool $direct = false): int

获取子节点的数量。

参数
Cake\Datasource\EntityInterface $node

要为其计数子级的实体

布尔值 $direct 可选

是否要计数子树中的所有节点,还是只计数直接子级

返回值
int

configShallow() ¶ 公共

configShallow(array<string, mixed>|string $key, mixed|null $value = null): $this

将提供的配置与现有配置合并。与 config() 不同,config() 对嵌套键执行递归合并,此方法执行简单合并。

设置特定值

$this->configShallow('key', $value);

设置嵌套值

$this->configShallow('some.nested.key', $value);

同时更新多个配置设置

$this->configShallow(['one' => 'value', 'another' => 'value']);
参数
array<string, mixed>|string $key

要设置的键,或完整的配置数组。

混合|null $value 可选

要设置的值。

返回值
$this

findChildren() ¶ 公共

findChildren(Cake\ORM\Query\SelectQuery $query, string|int $for, bool $direct = false): Cake\ORM\Query\SelectQuery

获取当前模型的子节点。

如果 direct 选项设置为 true,则只返回直接子级(基于 parent_id 字段)。

参数
Cake\ORM\Query\SelectQuery $query

查询。

字符串|int $for

要读取的记录的 ID。也可以是选项数组。

布尔值 $direct 可选

是否只返回直接子级(true)或所有子级(false)。

返回值
Cake\ORM\Query\SelectQuery
抛出
InvalidArgumentException
当 $options 中没有传递 'for' 键时

findPath() ¶ 公共

findPath(Cake\ORM\Query\SelectQuery $query, string|int $for): Cake\ORM\Query\SelectQuery

自定义查找器方法,可用于返回从树的根到特定节点的节点列表。此自定义查找器要求选项中传递键 'for',其中包含要获取其路径的节点的 id。

参数
Cake\ORM\Query\SelectQuery $query

要修改的构造的查询

字符串|int $for

要查找的路径,或包含 for 的选项数组。

返回值
Cake\ORM\Query\SelectQuery
抛出
InvalidArgumentException
如果 options 中缺少 'for' 键

findTreeList() ¶ 公共

findTreeList(Cake\ORM\Query\SelectQuery $query, Closure|string|null $keyPath = null, Closure|string|null $valuePath = null, string|null $spacer = null): Cake\ORM\Query\SelectQuery

获取树中元素的表示形式,作为一个扁平列表,其中键是表的主键,值是表的显示字段。值带有前缀,以便在视觉上指示树中的相对深度。

参数
Cake\ORM\Query\SelectQuery $query

查询。

闭包|字符串|null $keyPath 可选

用于获取用于数组键的字段的点分隔路径,或用于从提供的行中返回键的闭包。

闭包|字符串|null $valuePath 可选

用于获取用于数组值的字段的点分隔路径,或用于从提供的行中返回值的闭包。

字符串|null $spacer 可选

用于作为前缀来表示每个项目的树中深度的字符串。

返回值
Cake\ORM\Query\SelectQuery

formatTreeList() ¶ 公共

formatTreeList(Cake\ORM\Query\SelectQuery $query, Closure|string|null $keyPath = null, Closure|string|null $valuePath = null, string|null $spacer = null): Cake\ORM\Query\SelectQuery

将查询格式化为扁平列表,其中键是表的主键,值是表的显示字段。值带有前缀,以便在视觉上指示树中的相对深度。

参数
Cake\ORM\Query\SelectQuery $query

要格式化的查询对象。

闭包|字符串|null $keyPath 可选

指向结果数组键的字段的点分隔路径,或一个闭包,从提供的行返回键。

闭包|字符串|null $valuePath 可选

指向数组值的字段的点分隔路径,或一个闭包,从提供的行返回值。

字符串|null $spacer 可选

用于作为前缀来表示每个项目的树中深度的字符串。

返回值
Cake\ORM\Query\SelectQuery

getConfig() ¶ public

getConfig(string|null $key = null, mixed $default = null): mixed

返回配置。

用法

读取整个配置

$this->getConfig();

读取特定值

$this->getConfig('key');

读取嵌套值

$this->getConfig('some.nested.key');

使用默认值读取

$this->getConfig('some-key', 'default-value');
参数
string|null $key optional

要获取的键,或整个配置的 null。

mixed $default optional

当键不存在时的返回值。

返回值
混合

getConfigOrFail() ¶ public

getConfigOrFail(string $key): mixed

返回此特定键的配置。

此键的配置值必须存在,它永远不能为 null。

参数
string $key

要获取的键。

返回值
混合
抛出
InvalidArgumentException

getLevel() ¶ public

getLevel(Cake\Datasource\EntityInterface|string|int $entity): int|false

返回树中节点的深度级别。

参数
Cake\Datasource\EntityInterface|string|int $entity

获取其级别的实体或主键。

返回值
int|false

implementedEvents() ¶ public

implementedEvents(): array<string, mixed>

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

通过定义一个回调方法,行为被认为对相关事件感兴趣。

如果你需要添加非传统的事件监听器,或者你希望你的行为监听非标准事件,请重写此方法。

返回值
array<string, mixed>

implementedFinders() ¶ public

implementedFinders(): array

implementedFinders

提供一个行为实现的查找器的别名->方法名映射。示例

 [
   'this' => 'findThis',
   'alias' => 'findMethodName'
 ]

使用上面的示例,对 $table->find('this') 的调用将调用 $behavior->findThis(),对 $table->find('alias') 的调用将调用 $behavior->findMethodName()

建议,但不要求,在子类的 config 属性中定义 implementedFinders,这样就不需要使用反射来推断可用方法列表。查看核心行为以获取示例

返回值
数组
抛出
ReflectionException

implementedMethods() ¶ public

implementedMethods(): array

implementedMethods

提供行为实现的方法的别名->方法名映射。示例

 [
   'method' => 'method',
   'aliasedMethod' => 'somethingElse'
 ]

使用上面的示例,对 $table->method() 的调用将调用 $behavior->method(),对 $table->aliasedMethod() 的调用将调用 $behavior->somethingElse()

建议,但不要求,在子类的 config 属性中定义 implementedFinders,这样就不需要使用反射来推断可用方法列表。查看核心行为以获取示例

返回值
数组
抛出
ReflectionException

initialize() ¶ public

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

构造函数钩子方法。

实现此方法以避免覆盖构造函数并调用父类。

参数
array<string, mixed> $config
返回值
void

moveDown() ¶ public

moveDown(Cake\Datasource\EntityInterface $node, int|true $number = 1): Cake\Datasource\EntityInterface|false

重新排序节点,而不改变父级。

如果节点是最后一个子节点,或者是一个没有后续节点的顶级节点,此方法将返回相同的节点而不做任何更改。

参数
Cake\Datasource\EntityInterface $node

要移动的节点

int|true $number optional

移动节点的位数,或者 true 将移动到最后一个位置。

返回值
Cake\Datasource\EntityInterface|false
抛出
Cake\Datasource\Exception\RecordNotFoundException
当节点未找到时

moveUp() ¶ public

moveUp(Cake\Datasource\EntityInterface $node, int|true $number = 1): Cake\Datasource\EntityInterface|false

重新排序节点,而不改变其父级。

如果节点是第一个子节点,或者是一个没有前一个节点的顶级节点,此方法将返回相同的节点而不做任何更改。

参数
Cake\Datasource\EntityInterface $node

要移动的节点

int|true $number optional

要移动节点的位置数,或 true 表示移动到第一个位置

返回值
Cake\Datasource\EntityInterface|false
抛出
Cake\Datasource\Exception\RecordNotFoundException
当节点未找到时

recover() ¶ public

recover(): void

从父列定义的层次结构中恢复 lft 和 right 列的值。

返回值
void

removeFromTree() ¶ public

removeFromTree(Cake\Datasource\EntityInterface $node): Cake\Datasource\EntityInterface|false

通过将当前节点定位为新的根并将所有子节点向上重新父级一层来从树中删除当前节点。

请注意,节点不会被删除,只是从其当前位置移开,而不会移动其子节点。

参数
Cake\Datasource\EntityInterface $node

要从树中移除的节点

返回值
Cake\Datasource\EntityInterface|false

setConfig() ¶ public

setConfig(array<string, mixed>|string $key, mixed|null $value = null, bool $merge = true): $this

设置配置。

用法

设置特定值

$this->setConfig('key', $value);

设置嵌套值

$this->setConfig('some.nested.key', $value);

同时更新多个配置设置

$this->setConfig(['one' => 'value', 'another' => 'value']);
参数
array<string, mixed>|string $key

要设置的键,或完整的配置数组。

混合|null $value 可选

要设置的值。

bool $merge optional

是否递归合并或覆盖现有配置,默认为 true。

返回值
$this
抛出
Cake\Core\Exception\CakeException
当尝试设置一个无效的键时。

table() ¶ public

table(): Cake\ORM\Table

获取此行为绑定的表实例。

返回值
Cake\ORM\Table

verifyConfig() ¶ public

verifyConfig(): void

verifyConfig

检查实现的键是否包含指向可调用函数的值。

返回值
void
抛出
Cake\Core\Exception\CakeException
如果配置无效。

属性详情

$_config ¶ protected

运行时配置

类型
array<string, mixed>

$_configInitialized ¶ protected

配置属性是否已使用默认值进行配置

类型
bool

$_defaultConfig ¶ protected

默认配置

使用行为时,这些将与用户提供的配置合并。

类型
array<string, mixed>

$_primaryKey ¶ protected

表主键中第一列的缓存副本。

类型
string

$_reflectionCache ¶ protected static

行为的反射方法缓存。

存储每个类的反射方法+查找器方法。这可以防止在单个进程中多次反射同一个类。

类型
array<string, array>

$_table ¶ protected

表实例。

类型
Cake\ORM\Table
OpenHub
Pingping
Linode
  • 商业解决方案
  • 展示
  • 文档
  • 手册
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识 & 商标
  • 社区
  • 参与
  • 问题 (Github)
  • 烘焙坊
  • 精选资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 通讯
  • Linkedin
  • YouTube
  • Facebook
  • Twitter
  • Mastodon
  • 帮助 & 支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API Docs 生成