6

我想以列表的形式检索我的数据库中的所有表。

我试图对查询执行“显示数据库”,但由于我没有使用我在 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'

有什么想法可以帮助我吗?

4

5 回答 5

7

如另一个答案中所述,您可以使用Doctrine\DBAL

/** @type \Doctrine\DBAL\Connection $connection */
$connection = ...;

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

然后将表格列为Array

var_dump( $sm->listDatabases() );
于 2014-08-08T20:11:49.503 回答
5

我的 2 美分:

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

这将为您提供一组表名。

于 2017-04-24T18:59:15.927 回答
4

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

//get connection
$conn = $this->get('database_connection');
//run a query
$users= $conn->fetchAll('select * from users');

但是,使用此方法时要非常小心。由于您绕过了原则,因此您需要自己处理任何安全问题,例如 SQL 注入。

于 2012-12-27T16:00:09.687 回答
4

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

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

于 2014-03-23T20:21:39.337 回答
2

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

基本上,学说不知道如何解释您的查询,您必须为此使用本机查询:Doctrine Native Query

于 2012-12-27T15:53:09.320 回答