感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
这篇文章是关于Doctrine DBAL的。通常,您将使用更高级的Doctrine ORM层来完成工作, 但它内部实际上使用DBAL与数据库通信的。 阅读更多关于Doctrine ORM的信息,请看数据库和Doctrine
这个Doctrine数据库抽象层(DBAL : Doctrine Database Abstraction Layer)是一个构建在PDO之上的抽象层,并且提供了一个直观的并且灵活的API,用于与最流行的关系数据库进行通信。换句话说,DBAL库很容易就可以执行查询和执行其他数据库操作。
阅读官方的Doctrine DBAL文档,了解所有的细节和Doctrine DBAL的能力。
马上开始,配置数据库连接参数:
1 2 3 4 5 6 7 8 9 | # app/config/config.yml
doctrine:
dbal:
driver: pdo_mysql
dbname: Symfony
user: root
password: null
charset: UTF8
server_version: 5.6 |
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- app/config/config.xml -->
<doctrine:config>
<doctrine:dbal
name="default"
dbname="Symfony"
user="root"
password="null"
charset="UTF8"
server-version="5.6"
driver="pdo_mysql"
/>
</doctrine:config> |
想要完整的 DBAL 配置选项或者学习如何配置多种连接,参见 Doctrine DBAL 配置。
然后,你可以通过访问 database_connection
服务来访问 Doctrine DBAL 连接:
1 2 3 4 5 6 7 8 9 10 | class UserController extends Controller
{
public function indexAction()
{
$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM users');
// ...
}
} |
你可以通过Symfony配置来注册自定义映射类型。它们将被添加到所有已配置的连接中。想知道更多关于自定义映射类型的信息,请阅读它们文档的 Doctrine 自定义映射类型部分。
1 2 3 4 5 6 | # app/config/config.yml
doctrine:
dbal:
types:
custom_first: AppBundle\Type\CustomFirst
custom_second: AppBundle\Type\CustomSecond |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- app/config/config.xml -->
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:doctrine="http://symfony.com/schema/dic/doctrine"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
<doctrine:config>
<doctrine:dbal>
<doctrine:type name="custom_first" class="AppBundle\Type\CustomFirst" />
<doctrine:type name="custom_second" class="AppBundle\Type\CustomSecond" />
</doctrine:dbal>
</doctrine:config>
</container> |
SchemaTool 用于检查数据库,来比对schema。为了完成这个任务,需要知道每一个数据库类型需要的映射类型是什么。注册新的,可以通过配置来完成。
现在,将 ENUM 类型(默认情况下不被DBAL支持)映射到 string
映射类型:
1 2 3 4 5 | # app/config/config.yml
doctrine:
dbal:
mapping_types:
enum: string |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- app/config/config.xml -->
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:doctrine="http://symfony.com/schema/dic/doctrine"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
<doctrine:config>
<doctrine:dbal>
<doctrine:mapping-type name="enum">string</doctrine:mapping-type>
</doctrine:dbal>
</doctrine:config>
</container> |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。