Php 如何检查表名在Prope中是否有效?

Php 如何检查表名在Prope中是否有效?,php,mysql,propel,Php,Mysql,Propel,我想检查一个表名在spreep中是否有效,然后对它执行一些操作,比如获取它的PHP名称。问题是我使用的是DatabaseMap,它只包含已实例化的表。例如: $map = Propel::getDatabaseMap(); $map->getTableName('group'); // throws exception 如果我遍历这些表: $tables = $map->getTables(); foreach ($tables as $key => $value) {

我想检查一个表名在spreep中是否有效,然后对它执行一些操作,比如获取它的PHP名称。问题是我使用的是DatabaseMap,它只包含已实例化的表。例如:

$map = Propel::getDatabaseMap();
$map->getTableName('group'); // throws exception
如果我遍历这些表:

$tables = $map->getTables();
foreach ($tables as $key => $value) {
    echo $key;
}
它只输出“用户”。它不会输出数据库中的任何其他表


是否有其他方法可以检查表名在Prope中是否有效?

您可以使用PHP的simplexml解析schema.xml

$xml = simplexml_load_file('schema.xml');
$tableExists = 0 < count($xml->xpath("table[@phpName='$tableName']"));

在这种情况下,实际上不需要过滤用户的输入。

您只需检查类是否存在:

if (class_exists(camel_case($table, true) . 'Query')) {
  // it exists!
}

我是否需要在运行时开始时以某种方式引导数据库的表列表?我发布了一个很容易解决这个问题的方法,如果生成器只是创建一个表名到PHP名的映射并将其保存在一个新文件中,但在实现之前或如果实现了,这是最好的解决方案。好主意,但我的问题是相反的。我需要将表名转换为PHP名称,而不是将PHP名称转换为表名。
if (class_exists(camel_case($table, true) . 'Query')) {
  // it exists!
}