boronczyk/alistair

教育数据库包装器和 MVC 模型启动工具包

0.9 2021-12-09 00:01 UTC

This package is auto-updated.

Last update: 2024-09-09 06:06:00 UTC


README

Alistair 是一个为教学目的编写的简单 SQL 数据库包装器。它展示了如何封装常见的数据库操作,并将原始查询组织为 MVC 模型/存储库的基础。

DbAccess

DbAccess 类提供了执行 SQL 数据库查询的方法。

DbAccessInterface 定义的函数

  • query - 执行查询
  • queryRows - 执行查询并返回结果行
  • queryRow - 执行查询并返回单个结果行
  • queryValue - 执行查询并返回单个值
  • getPdo - 获取底层的 PDO 连接对象

示例用法

<?php
use Boronczyk\Alistair\DbAccess;

class Users
{
    public function __construct(
        protected DbAccess $db
    ) {
    }

    public function getById(int $id): array
    {
        return $this->db->queryRow(
            'SELECT id, username, email FROM users WHERE id = ?',
            [$id]
        );
    }
}

$db = new DbAccess(new \PDO(...));

$users = new Users($db);
$user = $users->getById(42);

CrudModel

CrudModel 是一个抽象类,提供了 CRUD 操作(创建、检索、更新、删除)的基本方法。实现必须实现 columns 方法,返回一个包含表已知列名的数组。

实现可以覆盖 table 方法,返回表名(基本实现从类的名称推导出表名)。实现还可以覆盖 requiredColumns 方法,返回一个数组,包含执行创建和更新操作所需的列名,如果列表与 column 返回的列表不同。

CrudModelInterface 定义的函数

  • table - 返回表名
  • columns - 返回已知列名列表
  • count - 返回表中的记录数
  • get - 返回记录,支持列过滤和分页
  • getById - 通过 ID 返回记录,支持列过滤
  • create - 创建新记录
  • update - 更新现有记录
  • delete - 删除现有记录

示例用法

<?php
use Boronczyk\Alistair\DbAccess;
use Boronczyk\Alistair\CrudModel;

class Users extends CrudModel
{
    // implementation required by abstract class
    public function columns(): array {
        return [
            'username',
            'email'
        ];
    }
}

$db = new DbAccess(new \PDO(...));

$users = new Users($db);
$user = $users->getById(42);