如何使用 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