bmware/dmk

MySQLi 数据库工具包

安装: 25

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

类型:package

v2.0.2 2019-01-28 17:37 UTC

This package is auto-updated.

Last update: 2024-09-29 04:49:49 UTC


README

BMware 数据库管理套件

composer: composer require bmware/dmk

目前有2个基本设置示例,第一个是常规数据库设置

require_once("vendor/autoload.php");

use config\DatabaseConfig;

$database = DatabaseConfig::create([
  "servername" => "localhost",
  "username" => "root",
  "password" => "",
  "useExistingDatabase" => true,
  "databaseName" => "bmbuilder_testing"
]);

DatabaseConfig::create() 接受一个参数数组。

  • servername:您本地/测试/生产站点的基准URL
  • username:数据库的用户名
  • password:数据库的密码
  • useExistingDatabase:布尔值,选择是否使用现有的数据库,还是创建一个新的数据库
  • databaseName:您想使用的数据库的名称,如果 useExistingDatabase 为 false,则该名称成为新数据库的名称。留空以使用默认数据库名称:bmbuilder_testing

第二个是基于 WordPress 的设置。

require_once("vendor/autoload.php");

use config\WordpressDatabaseConfig;

$database = WordpressDatabaseConfig::create();

除了设置之外,使用任一类的方式相同。然而,在底层,WordPressDatabase 使用全局 wpdb 向数据库发出查询

查询

目前该库预先构建了4个查询操作

  • 创建
use queries\CreateQuery;

$database->define(function($context){
  return CreateQuery::create("test")
  ->select("email", "location", "name")
  ->values("boydvree@BMware.com", "Netherlands", "boyd")
  ->values("someNoob@BMware.com", "noobland", "noob")
  ->endQuery();
});
  • 读取
use queries\ReadQuery;

$database->define(function($context){
  return ReadQuery::create("test")
  ->select()
  ->whereEquals("email", "boydvree@BMware.com")
  ->union()
  ->select()
  ->whereLessThan("email", "boydvre@BMware.com", true)
  ->endQuery();
});
  • 更新
use queries\UpdateQuery;

$database->define(function($context){
  return UpdateQuery::create("test")
  ->select("email")
  ->values("boydvree@BMware.com")
  ->whereEquals("email", "boydvree@BMware.com", true)
  ->endQuery();
});
  • 删除
use queries\DeleteQuery;

$database->define(function($context){
  return DeleteQuery::create("test")
  ->whereGreateThan("ID", "10")
  ->endQuery();
});

每个操作都有自己的查询对象及其修饰符。所有插入和 WHERE 语句都将自动转换为预处理器语句。

每个对象都有 create(string $table) 函数,该函数设置表并返回给定查询对象的实例。

每个对象都有 union(string $table = "") 函数,如果使用它,则创建给定查询对象的新实例,并返回它。然后在查询的末尾将它们放在一起使用 union。如果没有提供,将使用上一个查询的表名

CreateQueryReadQueryDeleteQuery 有 3 个 "where" 函数,分别是

  • whereEquals(string $field, string $value, bool $notEquals = false):将在查询中添加 "WHERE $field (!)= $value"
  • whereGreaterThan(string $field, string $value, bool $orEqualTo = false):将在查询中添加 "WHERE $field >(=) $value"
  • whereLessThan(string $field, string $value, bool $orEqualTo = false):将在查询中添加 "WHERE $field <(=) $value"

ReadQuery 有一个 join 函数,该函数接受 3 个参数,用于生成一个 join SQL 语句

  • string $table 要连接到第一个表右侧的表
  • string $conditionOne 用于连接两个字段的第一字段
  • string $condtionTwo 用于连接两个字段的第二字段

define 函数也接受查询作为参数

$database->define(
  ReadQuery::create("test")
  ->select()
  ->whereEquals("email", "boydvree@BMware.com")
  ->union()
  ->select()
  ->whereLessThan("email", "boydvre@BMware.com", true)
  ->endQuery()
);

另外,可以按以下方式创建自定义查询

$database->define(function($context){
  return $context("excecuteQuery", "SELECT * FROM `users`")
});

请注意,当使用函数方法时,需要返回查询

DatabaseResult

每个查询结果都将返回一个 DatabaseResult 对象,该对象包含成功消息或查询的行。您还将从该点开始访问各种不同的结果修饰符,以便从众多结果中选择一个。这将允许您一次性查询所有数据,并在任何给定时间点内部选择您想要看到的内容。数据永远不会被覆盖,因此您始终有查询的结果

结果修饰符的工作示例

$result->setUseModified(true) //tell the object to use the modifiedRow as the base for the next call

$result->getRowsByFieldValue("email", "hello@world.code")->selectFields("id")->getRows("modified"); // you can chain as many as you want toghetter however some might clash with eachother

foreach(DatbaseResult $result as $row){
  //excecute function here
}

$result->setUseModified(boolean $value) 设置 $result->useModified 变量值为 $value,这将使所有修改函数以 $result->modifiedRows 作为函数的基准点

$result->getUseModified() 返回当前 $result->useModified 的值

$result->getRowByIndex(int $index) 返回指定 $index 的行

$result->getRowsByFieldValue(string $field, string $value) 返回所有 $field 字段值与 $value 相同的行

$result->selectfields(string ...$fields) 仅返回此函数中指定的字段

$result->getRows(string $flag) 根据 $flag 的值返回前一次修改的行、基础行或当前修改的行,标志包括:表示前一次修改行的 "previous" 或表示当前修改行的 "modified",其他任何值都将仅返回查询的基础结果

有话要说

在我看来,使这个库变得“好”的是查询定义是在函数中完成的。这意味着你可以让你的编程精神自由发挥,并在例如模式上设置所有类型的条件检查。在查询执行之前,这意味着你可以在查询执行之前做几乎所有的事情。

规划

  1. 迁移支持,使迁移变得容易进行
  2. 模式支持,创建一个标准模式定义,可以自动转换为创建迁移
  3. CLI 工具,一个 CLI 工具,使迁移更容易。

欢迎提出任何建议。