[英]Symfony2 - doctrine get tables creation order
我正在使用Symfony 2.7,准则2,MySQL。 我正在尝试像发布时一样在控制器中检索表创建顺序
PHP应用程序/控制台学说:generate:schema --dump-sql
但我只需要表名。 因此,例如,如果我有两个表,如“ 产品-类别”,我希望有一个类似于以下的输出:array('Category','Product')
使用此文档,这是我到目前为止所做的:
public function getTablesCreationOrderAction()
{
$conn = $this->get('database_connection');
$sm = $conn->getSchemaManager();
$sequences = $sm->listSequences($this->getParameter('database_name'));
die();
}
$ sequences = $ sm-> listSequences引发异常。
这是我得到的例外:
平台不支持“ Doctrine \\ DBAL \\ Platforms \\ AbstractPlatform :: getListSequencesSQL”操作。
我不知道这是否意味着MySQL不支持该操作。
谢谢!
是的,但是似乎该功能尚未实现,因为它在AbstractPlatform的源代码中,您将看到:
public function getListSequencesSQL($database)
{
throw DBALException::notSupported(__METHOD__);
}
现在,这意味着覆盖AbstractPlatform
平台必须覆盖这些功能以提供正确的实现。
现在,如果您看一下MySqlPlatform ,将无法在任何地方找到getListSequencesSQL()
,因此您无法在mysql
使用此功能,或者至少未实现该功能。
对于那些感兴趣的人,这是我的做法。 可能会有更好的方法。
public function getTablesCreationOrderAction()
{
$app = New Application($this->get('kernel'));
$app->setAutoExit(false);
$input = New ArrayInput(['command' => 'doctrine:schema:create',
'--dump-sql'=>true]);
$output = New BufferedOutput();
$app->run($input, $output);
$rst = $output->fetch();
$schema = explode('CREATE TABLE ', $rst);
$tables = [];
foreach ($schema as $tableDef)
{
$tables[] = explode(' (', $tableDef)[0];
}
unset($tables[0]); // empty
var_dump($tables);
die();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.