繁体   English   中英

Symfony2-原则获取表创建顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM