原文: http://zetcode.com/symfony/dbal/

Symfony DBAL 教程显示了如何使用 Doctrine DBAL 组件在 Symfony 应用中使用数据库。

Symfony

Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。 Symfony 于 2005 年发布为免费软件。Fabien Potencier 是 Symfony 的原始作者。 Symfony 的灵感来自 Ruby on Rails,Django 和 Spring 框架。

Symfony DBAL 组件

教义数据库抽象层(DBAL)是位于 PDO 之上的抽象层,并提供了一种直观且灵活的 API,可以与最受欢迎的关系数据库进行通信。 DBAL 库使执行查询和执行其他数据库操作变得容易。

Symfony DBAL 示例

在下面的示例中,我们创建一个简单的 Symfony 应用,该应用使用 DBAL 读取数据。 我们使用 MySQL 数据库。

  1. $ composer create-project symfony/skeleton symdbal

使用composer,我们创建一个新的 Symfony 骨架项目。

  1. $ cd symdbal

我们转到项目目录。

  1. $ composer require symfony/orm-pack

我们安装symfony/orm-pack,其中包含 DBAL API。

  1. $ composer require maker --dev

另外,我们安装了maker组件。 maker包提供了脚手架。

  1. $ composer require server --dev

我们安装开发 Web 服务器。

countries_mysql.sql

  1. CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  2. name VARCHAR(100), population INT);
  3. INSERT INTO countries(name, population) VALUES('China', 1382050000);
  4. INSERT INTO countries(name, population) VALUES('India', 1313210000);
  5. INSERT INTO countries(name, population) VALUES('USA', 324666000);
  6. INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
  7. INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
  8. INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
  9. INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
  10. INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
  11. INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
  12. INSERT INTO countries(name, population) VALUES('Russia', 146838000);
  13. INSERT INTO countries(name, population) VALUES('Japan', 126830000);
  14. INSERT INTO countries(name, population) VALUES('Mexico', 122273000);
  15. INSERT INTO countries(name, population) VALUES('Philippines', 103738000);

这是一些测试数据。 它在 MySQL 中创建一个小表。 我们可以使用source命令执行文件。

.env

  1. ...
  2. DATABASE_URL=mysql://user12:s$cret@localhost:3306/mydb

.env文件中,我们配置数据库 URL。

  1. $ php bin/console make:controller HomeController

HomeController由 Symfony 制造商创建。

src/Controller/HomeController.php

  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\DBAL\Connection;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. class HomeController extends AbstractController
  7. {
  8. /**
  9. * @Route("/home", name="home")
  10. */
  11. public function index(Connection $conn)
  12. {
  13. $queryBuilder = $conn->createQueryBuilder();
  14. $data = $queryBuilder->select('*')->from('countries')->execute()->fetchAll();
  15. return $this->json([
  16. 'data' => $data
  17. ]);
  18. }
  19. }

该控制器方法执行一个查询,该查询从countries表中获取所有行,并将其作为 JSON 数据返回。 请注意,出于简单原因,我们已将查询生成器放入控制器中。 在生产应用中,还应该有一个服务层和一个存储库。

  1. public function index(Connection $conn)
  2. {

DBAL Connection对象被注入到方法变量中。

  1. $queryBuilder = $conn->createQueryBuilder();

我们从连接创建一个QueryBuilder

  1. $data = $queryBuilder->select('*')->from('countries')->execute()->fetchAll();

我们执行查询并获取所有行。

  1. return $this->json([
  2. 'data' => $data
  3. ]);

数据以 JSON 格式返回。

  1. $ php bin/console server:run

Web 服务器已启动。

  1. $ curl localhost:8000/home
  2. {"data":[{"id":"1","name":"China","population":"1382050000"},
  3. {"id":"2","name":"India","population":"1313210000"},
  4. {"id":"3","name":"USA","population":"324666000"},
  5. {"id":"4","name":"Indonesia","population":"260581000"},
  6. {"id":"5","name":"Brazil","population":"207221000"},
  7. {"id":"6","name":"Pakistan","population":"196626000"},
  8. {"id":"7","name":"Nigeria","population":"186988000"},
  9. {"id":"8","name":"Bangladesh","population":"162099000"},
  10. {"id":"9","name":"Nigeria","population":"186988000"},
  11. {"id":"10","name":"Russia","population":"146838000"},
  12. {"id":"11","name":"Japan","population":"126830000"},
  13. {"id":"12","name":"Mexico","population":"122273000"},
  14. {"id":"13","name":"Philippines","population":"103738000"}]}

我们使用curl工具执行 GET 请求。

在本教程中,我们在 Symfony 中使用了 Doctrine DBAL。

您可能也对以下相关教程感兴趣: Symfony 简介Doctrine DBAL QueryBuilder教程Symfony 表单教程Symfony 翻译教程PHP 教程