跳到内容

如何使用 Doctrine DBAL

编辑此页

注意

本文是关于 Doctrine DBAL 的。通常,您会使用更高级别的 Doctrine ORM 层,它在幕后使用 DBAL 来实际与数据库通信。要了解有关 Doctrine ORM 的更多信息,请参阅“数据库和 Doctrine ORM”。

Doctrine 数据库抽象层 (DBAL) 是一个位于 PDO 之上的抽象层,并为与最流行的关系数据库通信提供了直观而灵活的 API。 DBAL 库允许您独立于 ORM 模型编写查询,例如,用于构建报告或直接数据操作。

提示

阅读官方 Doctrine DBAL 文档,了解 Doctrine DBAL 库的所有详细信息和功能。

首先,安装 Doctrine orm Symfony 包

1
$ composer require symfony/orm-pack

然后在 .env 中配置 DATABASE_URL 环境变量

1
2
3
4
# .env (or override DATABASE_URL in .env.local to avoid committing your changes)

# customize this line!
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name?serverVersion=8.0.37"

更多内容可以在 config/packages/doctrine.yaml 中配置 - 请参阅 Doctrine 配置参考 (DoctrineBundle)。如果您想使用 Doctrine ORM,请删除该文件中的 orm 键。

然后,您可以通过自动装配 Connection 对象来访问 Doctrine DBAL 连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// src/Controller/UserController.php
namespace App\Controller;

use Doctrine\DBAL\Connection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class UserController extends AbstractController
{
    public function index(Connection $connection): Response
    {
        $users = $connection->fetchAllAssociative('SELECT * FROM users');

        // ...
    }
}

这将传递给您 database_connection 服务。

注册自定义映射类型

您可以通过 Symfony 的配置注册自定义映射类型。它们将被添加到所有已配置的连接。有关自定义映射类型的更多信息,请阅读 Doctrine 文档的 自定义映射类型 部分。

1
2
3
4
5
6
# config/packages/doctrine.yaml
doctrine:
    dbal:
        types:
            custom_first:  App\Type\CustomFirst
            custom_second: App\Type\CustomSecond

在 SchemaTool 中注册自定义映射类型

SchemaTool 用于检查数据库以比较模式。 为了完成此任务,它需要知道每个数据库类型需要使用哪种映射类型。 注册新的映射类型可以通过配置完成。

现在,将 ENUM 类型(DBAL 默认不支持)映射到 string 映射类型

1
2
3
4
5
# config/packages/doctrine.yaml
doctrine:
    dbal:
        mapping_types:
            enum: string
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本