douhan6738 2015-08-09 12:21
浏览 40
已采纳

Symfony2 - doctrine获取表创建顺序

I am using Symfony 2.7, doctrine 2, MySQL. I'm trying to retrieve the tables creation order in a controller as when issuing

php app/console doctrine:generate:schema --dump-sql

but I only need the table names. So, for instance, if I have two tables like Product - Category I'd like to have an output which looks like this : array('Category', 'Product')

Using this documentation here's what I've done so far:

public function getTablesCreationOrderAction()
{
    $conn = $this->get('database_connection');
    $sm = $conn->getSchemaManager();
    $sequences = $sm->listSequences($this->getParameter('database_name'));
    die();
}

An exception is thrown at $sequences = $sm->listSequences.

Here's the exception I get:

Operation 'Doctrine\DBAL\Platforms\AbstractPlatform::getListSequencesSQL' is not supported by platform.

I don't know if this means that MySQL does not support the operation.

Thanks!

  • 写回答

2条回答 默认 最新

  • duanchangnie7996 2015-08-17 17:36
    关注

    For those interested, here's how I did it. There may be better ways..

    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();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?