我想检索我的数据库的所有表作为一个列表。
我试图在查询上做一个"显示数据库",但由于我没有使用我在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