Doctrine DBAL QueryBuilder 教程显示了如何使用 Doctrine 的 QueryBuilder 在 PHP 中编程数据库。
Doctrine
Doctrine 是一组 PHP 库,主要致力于在 PHP 中提供持久性服务。 它的主要项目是对象关系映射器(ORM)和数据库抽象层(DBAL)。 Doctrine 是根据 MIT 许可免费提供的一个开源项目。
Doctrine QueryBuilder
Doctrine QueryBuilder 为创建和运行数据库查询提供了方便,流畅的界面。 它是对运行 SQL 语句的低级详细信息的抽象。 它可以使程序员避免过程的复杂性。
Doctrine 有两种查询构建器; 一个用于 ORM,一个用于 DBAL。 在本教程中,我们介绍了 DBAL 的 QueryBuilder。
Doctrine 数据库抽象层(DBAL)是位于 PDO 之上的抽象层,并提供了一种直观且灵活的 API,可以与最受欢迎的关系数据库进行通信。
PostgreSQL 数据库
在本教程中,我们使用 PostgreSQL 数据库。
cars_postgre.sql
这些 SQL 命令创建一个cars
表。
Doctrine 安装
我们安装了 Doctrine 和一些辅助工具。
我们安装 Doctrine。 请注意,DBAL 层包含在doctrine/dbal
包中。
我们安装了 Symfony 的 dumper 和 Laravel 集合。 我们将在示例中使用它们。
我们生成项目中需要包含的所有类的列表。 composer
重新读取composer.json
文件以建立要自动加载的文件列表。
引导 Doctrine CLI 示例
我们创建一个引导文件,该文件将包含在所有示例中。
bootstrap.php
在引导文件中,我们包括自动加载文件并建立与 PostgreSQL 数据库的连接。
获取 PostgreSQL 版本
在第一个示例中,我们获得 PostgreSQL 的版本。
version.php
该示例显示 PostgreSQL 数据库的版本。
在连接对象中,我们使用createQueryBuilder()
创建查询生成器。
我们用select()
执行version()
功能。
我们执行查询并使用fetchColumn()
获取结果。 注意方法调用的链接; 这称为流利的 API。
Doctrine QueryBuilder
fetchall
fetchall()
方法返回表中的所有行。
featch_all.php
该示例从cars
表中检索所有行。
我们从cars
表中选择所有行。 select()
将列名显示为参数。
我们执行查询并使用fetchAll()
获取所有行。
我们使用 Laravel 集合对数据进行排序。
排序后的数据将打印到控制台。
这是输出,数据按price
列排序。
DocQuery QueryBuilder
表别名
我们可以给数据库表起别名。 当表名很长并且我们使用多个表时,这很有用。
table_alias.php
该示例打印价格低于 30000 的所有汽车。
我们给cars
表别名c
,稍后,我们通过别名引用该表。
我们用dump()
输出数据。
有四辆价格低于 30000 的汽车。输出使用 Symfony 的自卸车很好地格式化。 输出也会在端子上着色。
Doctrine QueryBuilder
setParameter
setParameter()
用于将参数设置为查询占位符。 原则支持位置参数和命名参数。
参数化查询用于保护代码免遭 SQL 注入并提高查询效率。
fetch_column.php
在示例中,我们获得的行具有 ID6。我们使用参数化查询来获取列。
占位符用?
字符标识。 此类型称为位置参数。 使用setParameter()
,我们将值映射到占位符。
This is the output.
Doctrine QueryBuilder
orderBy
数据可以通过orderBy()
进行排序。 有时我们无法控制数据发送给我们的方式; 在这种情况下,我们可以使用 Laravel Collections 对数据进行排序,就像在获取所有示例中所做的那样。
order_by.php
该示例从cars
表中检索所有行,并按汽车名称降序对其进行排序。
数据已选择并排序。
Doctrine QueryBuilder
WHERE
下面的示例演示如何使用WHERE IN
子句构建查询。
where_in.php
该示例打印具有指定 ID:2、4 和 6 的汽车。
我们需要告诉 Doctrine 我们使用带有Connection::PARAM_INT_ARRAY
标志的数组作为参数。
Doctrine QueryBuilder
andWhere
我们可以通过添加andWhere()
来合并WHERE
子句。
and_where.php
该示例显示了价格在给定的最低和最高价格之间的所有汽车。
有四辆满足条件的汽车。
Doctrine QueryBuilder
插入行
用insert()
和values()
插入新行。
insert_row.php
该示例将新车插入cars
表。
可以使用setParameters()
指定多个参数。
getSQL()
获取由 Doctrine 生成的 SQL 语句。
输出显示生成的 SQL 语句。
Doctrine QueryBuilder
删除
用delete()
删除数据。
delete_rows.php
该示例删除 ID 为 1、2 和 3 的行。
execute()
方法返回已删除的行数。
学说 QueryBuilder 更新行
用udpate()
和set()
更新一行。
udpate_row.php
该示例使用 ID 9 更新汽车的价格。
Symfony Doctrine 的例子
以下示例是一个简单的 Symfony Web 应用。 Symfony 使用 Doctrine 进行持久化。
我们创建一个新的 Symfony 骨架应用。
我们安装 Doctrine。
我们安装maker
和server
组件。
config/packages/doctrine.yaml
我们将 Doctrine 配置为使用 PostgreSQL。 默认情况下,Symfony 具有 MySQL 的配置。
.env
在.env
文件中,设置DATABASE_URL
。
我们验证 PostgreSQL 设置。
与制造商一起,我们创建一个新的控制器。
src/Controller/HomeController.php
index()
方法返回数据库表中的所有行。 请注意,出于简单原因,我们已将查询生成器放入控制器中。 在生产应用中,还应该有一个服务层和一个存储库。
数据以 JSON 格式发送回客户端。
我们运行开发服务器。
使用curl
,我们生成一个对应用的请求。
您可能也对以下相关教程感兴趣: PHP PDO 教程, Rakit 验证教程,PHP 教程。