Symfony2 -显示数据库中的所有表


Symfony2 - Show all tables from database

我想检索我的数据库的所有表作为一个列表。

我试图在查询上做一个"显示数据库",但由于我没有使用我在symfony中定义的类(实体),所以它不起作用。

和DQL:

   $em = $this->getDoctrine()->getEntityManager();
   $query = $em->createQuery(
        'show databases');
    $result = $query->getResult();

这个错误:

[Syntax Error] line 0, col 0: Error: Expected SELECT, UPDATE or DELETE, got 'show'

有什么好主意吗?

正如在另一个答案中提到的,您可以使用Doctrine'DBAL:

/** @type 'Doctrine'DBAL'Connection $connection */
$connection = ...;
/** @type 'Doctrine'DBAL'Schema'MySqlSchemaManager $sm */
$sm = $connection->getSchemaManager();

然后将表列为Array:

var_dump( $sm->listDatabases() );

My two cents:

getContainer()->get('doctrine.dbal.default_connection')->getSchemaManager()->listTableNames()

这将给你一个表名数组

我有几个情况下,我需要使用复杂的sql语句/函数,我只是不能在DQL做。幸运的是,Symfony2/doctrine提供了一种方法来获取当前数据库连接,并完全绕过doctrine。

//get connection
$conn = $this->get('database_connection');
//run a query
$users= $conn->fetchAll('select * from users');
但是,在使用此方法时,

非常小心。由于您正在绕过原则,您需要自己处理任何安全问题,如SQL注入。

您可以将Doctrine DBAL添加到您的项目中,它将为您提供所需的工具。你可以列出数据库,数据库中的表,表中的列等等

更多Doctrine DBAL文档:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/schema-manager.html

Doctrine是一个ORM,它并不打算列出所有的数据库。除此之外,通常对于当前用户来说,您没有权利显示服务器中的所有数据库,这可能被证明是一个很大的安全漏洞。

基本上,doctrine不知道如何解释你的查询,你必须使用本地查询:doctrine native query