推进 - 检索所有表格

时间:2016-06-10 23:07:45

标签: php oop orm propel

我想使用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

3 个答案:

答案 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();