我正在寻找一种获取所有可用table objects列表的方法。这些是(默认情况下)位于App/Modal/Table
下并且由TableRegistry
处理的所有类。如何获取所有这些对象的列表?
我知道可以获取db的所有表:
$tables = ConnectionManager::get('default')->schemaCollection()->listTables();
然后使用TableRegistry::get()
获取表对象。
但这对我的解决方案来说是不可能的,因为有两种情况不起作用:
有什么想法吗?
编辑:为什么?我需要所有使用行为X的表对象。在我的例子中是一个自定义的SearchableBehavior,它为已保存的实体更新每个afterSave事件的searchindex表。要更新所有表的所有实体的searchindex,我需要知道哪些表正在使用SearchableBehavior并手动调用它们的更新方法。
答案 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);