Symfony DBAL 教程

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

Symfony DBAL 组件

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

Symfony DBAL 示例

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

$ composer create-project symfony/skeleton symdbal

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

$ cd symdbal

我们转到项目目录。

$ composer require symfony/orm-pack

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

$ composer require maker --dev

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

$ composer require server --dev

我们安装开发 Web 服务器。

countries_mysql.sql

CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(100), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
INSERT INTO countries(name, population) VALUES('Mexico', 122273000);
INSERT INTO countries(name, population) VALUES('Philippines', 103738000);

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

.env

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

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

$ php bin/console make:controller HomeController

HomeController由 Symfony 制造商创建。

src/Controller/HomeController.php

<?php

namespace App\Controller;

use Doctrine\DBAL\Connection;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class HomeController extends AbstractController
{
    /**
     * @Route("/home", name="home")
     */
    public function index(Connection conn)
    {queryBuilder = conn->createQueryBuilder();data = queryBuilder->select('*')->from('countries')->execute()->fetchAll();

        returnthis->json([
            'data' => $data
        ]);
    }
}

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

public function index(Connection $conn)
{

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

$queryBuilder = $conn->createQueryBuilder();

我们从连接创建一个QueryBuilder

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

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

return this->json([
    'data' =>data
]);

数据以 JSON 格式返回。

$ php bin/console server:run

Web 服务器已启动。

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

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程