anax/database-query-builder

Anax 数据库查询构建模块,通过方法创建查询。

v2.0.4 2019-12-09 22:26 UTC

README

Latest Stable Version Join the chat at https://gitter.im/canax/database-query-builder

Build Status CircleCI

Build Status Scrutinizer Code Quality Code Coverage

Maintainability Codacy Badge

Anax 数据库查询构建模块作为 anax/database 的扩展,允许使用方法而不是 SQL 查询数据库。

此模块用于实现 Database Active Record 模块 anax\database-active-record

该模块使用 MySQL 和 SQLite 进行测试。

目录

安装

您可以使用 composer 从 anax/database-query-builder 在 Packagist 上安装此模块。

composer require anax/database-query-builder

然后,您可以复制默认配置文件作为开始。

# In the root of your Anax installation
rsync -av vendor/anax/database-query-builder/config .

开发

要作为开发者工作,您需要克隆存储库并通过 make 安装本地环境。然后,您可以运行单元测试。

make install
make test

类、接口、特质

以下是一些类、接口和特质。

以下部分与 SQL 查询构建器的功能相关。

异常

所有异常都在命名空间 Anax\DatabaseQueryBuilder\Exception\ 中。以下存在以下异常,可能会抛出。

DI 服务

数据库查询构建器在 $di 内部作为框架服务创建。以下是通过 config/di/dbqb.php 创建数据库查询构建器服务的示例。

/**
 * Configuration file for database query builder service.
 */
return [
    // Services to add to the container.
    "services" => [
        "dbqb" => [
            "shared" => true,
            "callback" => function () {
                $obj = new \Anax\DatabaseQueryBuilder\DatabaseQueryBuilder();

                // Load the configuration files
                $cfg = $this->get("configuration");
                $config = $cfg->load("database");

                // Set the database configuration
                $connection = $config["config"] ?? [];
                $db->setOptions($connection);
                $db->setDefaultsFromConfiguration();

                return $db;
            }
        ],
    ],
];

作为框架服务访问

您可以将模块作为框架服务访问并用作普通数据库服务。

$sql = "SELECT * FROM movie;";

$db = $di->get("dbqb");
$db->connect();
$res = $db->executeFetchAll($sql);

这是由于 \Anax\DatabaseQueryBuilder\DatabaseQueryBuilder 类扩展了数据库类 \Anax\Database\Database

基本用法

这是查询构建器的基本用法。

您首先从查询构建器类创建数据库对象并将其连接到数据库。

$this->db = new DatabaseQueryBuilder([
    "dsn" => "sqlite::memory:",
]);
$this->db->setDefaultsFromConfiguration();
$this->db->connect();

这基本上等同于从 $di 容器检索类。

现在您可以创建一个表。

// Create a table
$this->db->createTable(
    'user',
    [
        'id'    => ['integer', 'primary key', 'not null'],
        'age'   => ['integer'],
        'name'  => ['varchar(10)']
    ]
)->execute();

表已创建。

现在您可以向表中插入行。

$this->db->insert(
    "user",
    [
        "age" => 3,
        "name" => "three",
    ]
)->execute();

$last = $this->db->lastInsertId(); // 1
$rows = $this->db->rowCount();     // 1

现在您可以查询表。

$res = $this->db->select("*")
                ->from("user")
                ->where("id = 1")
                ->execute()
                ->fetch();

$res->id;   // 1
$res->age;  // 3
$res->name; // "three"

这是基本用法,其思想是使用类方法创建 SQL 查询,并在幕后构建实际的 SQL 查询。

依赖

此模块依赖于并扩展了数据库抽象层 anax\database

模块通常在 Anax 安装中使用,但也可以在不使用 Anax 的情况下使用。

许可

此软件携带 MIT 许可。有关详细信息,请参阅 LICENSE.txt

 .  
..:  Copyright (c) 2013 - 2018 Mikael Roos, mos@dbwebb.se