我想使用propel获得所有模式表的输出。引用特定TableMap
$users = UsersTableMap::getTableMap();
$map = $users->getDatabaseMap();
$tables = $map->getTables(); //yields an object, holds only Users table
有没有办法不来使用特定的表格(例如Users
)但是有更通用的方法?有一点过时question here面临同样的问题。
我应该创建自定义查询还是解析schema.xml
以检索所有表?
下面给出的一些解决方案作为答案产生空数组
$map = Propel::getServiceContainer()->getDatabaseMap(); //w & w/o string argument
$tables = $map->getTables(); //an empty array
答案 0 :(得分:6)
当前版本2中无法通过一次调用检索所有表映射。原因:我们需要加载所有表格地图,这是令人难以置信的缓慢,我们没有完整的“地图”/“数组”列表,其中包含构建时可用的所有可用表格地图。然而,在Propel3中,这是可能的。
您应该遵循的唯一解决方案是解析schema.xml:How do I check if table names are valid in Propel?
您可以额外做的是使用反向类Propel来反转真实数据库。但是,这非常慢,因为它将一直读取整个数据库结构。见https://github.com/propelorm/Propel2/issues/261#issuecomment-40659647
答案 1 :(得分:0)
你可以试试这个:
<?php
use Propel\Runtime\Propel;
$map = Propel::getServiceContainer()->getDatabaseMap('default');
$tables = $map->getTables();
default
应替换为您为数据库连接定义的任何名称。
答案 2 :(得分:0)
您可以通过获取当前推进服务容器来访问数据库地图,例如:
$dbMap = Propel::getServiceContainer()->getDatabaseMap();
$tables = $dbMap->getTables();
具体来说,代码abowe将从默认连接中提取db映射,但您可以指定另一个已配置的连接,假设您有一个名为“asdrubale”的辅助连接:
$dbMap = Propel::getServiceContainer()->getDatabaseMap('asdrubale');
$tables = $dbMap->getTables();