【发布时间】:2017-08-25 09:33:35
【问题描述】:
我正在寻找一种方法来获取所有可用table objects 的列表。这些是(默认情况下)位于App/Modal/Table 下并由TableRegistry 处理的所有类。如何获取所有这些对象的列表?
我知道可以获取数据库的所有表:
$tables = ConnectionManager::get('default')->schemaCollection()->listTables();
然后使用TableRegistry::get()获取表格对象。
但这对于我的解决方案是不可能的,因为有两种情况不起作用:
- 与表对象名称不同的自定义表名称
- 插件表对象
有什么想法吗?
编辑:为什么?我需要所有使用行为 X 的表对象。在我的例子中是自定义 SearchableBehavior,它会在每个 afterSave 事件上更新已保存实体的 searchindex 表。要更新所有表的所有实体的 searchindex,我需要知道哪些表正在使用 SearchableBehavior 并手动调用它们的更新方法。
【问题讨论】:
-
I need a list of all table objects that use a behavior X- 为什么?我确信有更好的方法来做任何你尝试的事情。 -
请查看更新后的问题,我添加了更多背景信息。
-
为什么需要更新all?当
Model.afterSave被触发时,我们对相关表进行索引更新。一种行为就是这样做的。该行为还检查获取数据的方法,如果不存在,则回退到 Table::get()。顺便说一下,该插件是开源的,但使用 Elastic Search github.com/World-Architects/cakephp-elastic-index 来索引数据。 -
update all 是搜索索引的初始创建或表结构发生更改并且需要重新创建索引时所必需的。你的插件看起来很棒,谢谢!它的行为类似于我的解决方案。我是否理解正确,每次保存单个数据集时,您的行为都会为表重新创建索引?还是只是这个单一数据集的索引数据?
-
不,因为这很愚蠢,因为它很慢而且需要时间。重新创建整个索引绝对没有意义。我们有一个外壳(包含在插件中)并通过配置指定可以索引的表列表。这就是我们重新创建索引的方式,但仅在架构更改后且仅在新索引上执行此操作,然后在索引编制完成后切换索引。您不会在运行时重建整个索引。
标签: cakephp cakephp-3.x