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!
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();
}
Yes, but it seems like the feature isn't implemented yet, since this is in the source code of AbstractPlatform you will see this:
public function getListSequencesSQL($database)
{
throw DBALException::notSupported(__METHOD__);
}
Now this means that platforms overriding AbstractPlatform
must override these functions to provide the right implementation.
Now if you take a look at MySqlPlatform, you won't be able to find the getListSequencesSQL()
anywhere, hence you can't use this feature with mysql
or at least it's not implemented.