CakePHP 3:获取所有表对象的列表

时间:2017-08-25 09:33:36

标签: cakephp cakephp-3.x

我正在寻找一种获取所有可用table objects列表的方法。这些是(默认情况下)位于App/Modal/Table下并且由TableRegistry处理的所有类。如何获取所有这些对象的列表?

我知道可以获取db的所有表:

$tables = ConnectionManager::get('default')->schemaCollection()->listTables();

然后使用TableRegistry::get()获取表对象。

但这对我的解决方案来说是不可能的,因为有两种情况不起作用:

  1. 与表对象名称
  2. 不同的自定义表名
  3. 插件表对象
  4. 有什么想法吗?

    编辑:为什么?我需要所有使用行为X的表对象。在我的例子中是一个自定义的SearchableBehavior,它为已保存的实体更新每个afterSave事件的searchindex表。要更新所有表的所有实体的searchindex,我需要知道哪些表正在使用SearchableBehavior并手动调用它们的更新方法。

2 个答案:

答案 0 :(得分:0)

编写一个侦听cmd.CommandType = CommandType.StoredProcedure 的事件侦听器,然后检查主题,如果表有您的行为,则为表对象。然后对该列表做一些事情。

如果这对您不起作用 - 您提供背景信息 - 遍历应用程序Model / Table文件夹和插件文件夹以及供应商文件夹并搜索Model文件夹并检查{{ 1}}文件。然后尝试根据路径/名称空间和文件名实例化表对象并检查模型。但这不是很快,你应该缓存结果列表。

答案 1 :(得分:0)


    $tables = glob(APP."Model".DS."Table".DS."*Table.php");
    $tablesNames = [];
    foreach ($tables as $name){
        $item = explode('Table.php', basename($name));
        $tablesNames[] = $item[0];
    }
    pr(tablesNames);