pinkcrab/table_builder

用于定义表格模式并在大多数SQL数据库中创建表格。


README

一个链式表格模式构造器,内置(WPDB) DB Delta构建器。

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require GitHub contributors GitHub issues

WordPress 5.9 Test Suite [PHP7.2-8.1] WordPress 6.0 Test Suite [PHP7.2-8.1] WordPress 6.1 Test Suite [PHP7.2-8.1]

codecov Scrutinizer Code Quality Maintainability

相关页面
» 模式
»
» 索引
» 外键

为什么?

对于那些曾经使用dbDelta在WordPress中创建表格的人来说,说它有点挑剔是轻描淡写的。

PinkCrab\Table_Builder模块通过提供一个更具有表现力的流畅API来定义模式,从而使得创建表格变得更加容易,这个API可以传递给Builder以创建表格。

默认情况下,此软件包仅包含DB_Delta构建器引擎,但得益于SQL_Builder接口,可以轻松创建其他表格格式的引擎。

安装

composer require pinkcrab/table_builder

定义表格模式

您可以通过几种不同的方式定义表格的模式。

<?php

$schema_a = new Schema('my_table', function(Schema $schema){
    // Set columns
    $schema->column('id')->unsigned_int(11)->auto_increment();
    $schema->column('user')->int(11);
    
    // Set keys and indexes.
    $schema->index('id')->primary();
    $schema->index('user')->unique();
});

$schema_b = new Schema('my_table');
// Set columns
$schema_b->column('id')->unsigned_int(11)->auto_increment();
$schema_b->column('user')->int(11);

// Set keys and indexes.
$schema_b->index('id')->primary();
$schema_b->index('user')->unique();

查看模式文档

模式是从各种列定义的,每个列都定义为其自己的对象,具有一系列方法辅助/快捷方式

索引和外键

您可以为您的表格设置各种索引和外键。这些可以像上面的模式示例中设置的那样。

索引

您可以为表格的任何列创建索引,并将字段标记为唯一、主键、全文、哈希或普通索引。

<?php

$schema_a = new Schema('my_table', function(Schema $schema){
    // Set columns
    $schema->column('id')->unsigned_int(11)->auto_increment();
    $schema->column('user')->int(11);
    $schema->column('details')->text();
    
    // Set keys and indexes.
    $schema->index('id')->primary();
    $schema->index('user')->unique();
    $schema->index('details')->full_text();
});

上面的代码将生成

CREATE TABLE my_table(
    id INT AUTO_INCREMENT
    user INT(11),
    details TEXT,
    PRIMARY KEY ix_id (id),
    UNIQUE INDEX ix_user (user),
    FULLTEXT INDEX ix_details (details)
);

如果您希望使用多个列作为索引,请将它们添加为单个索引,构建器将合并它们。您还必须为所有分组索引设置自定义键名。

$schema = new Schema('my_table', function(Schema $schema){
    // Set columns
    $schema->column('id')->unsigned_int(11)->auto_increment();
    $schema->column('user')->int(11);
    $schema->column('details')->text();
    
    // Set keys and indexes.
    $schema->index('id')->primary();

    $schema->index('user', 'unique_keys')->unique();
    $schema->index('details', 'unique_keys')->unique();
});

上面的代码将为MySQL生成以下内容

CREATE TABLE my_table(
    id INT AUTO_INCREMENT
    user INT(11),
    details TEXT,
    PRIMARY KEY ix_id (id),
    UNIQUE INDEX unique_keys (user, details)
);

查看索引文档

外键

与常规索引一样,外键可以分配给表格。当表格构建时,它将假设引用表存在,因此如果您一次性创建所有表格,请确保按正确顺序创建它们。

<?php

$schema = new Schema('my_table', function(Schema $schema){
    // Set columns
    $schema->column('id')->unsigned_int(11)->auto_increment();
    $schema->column('user')->int(11);
    $schema->column('details')->text();
    
    // Set keys and indexes.
    $schema->index('id')->primary();
    
    $schema->foreign_key('user', 'custom_keyname')
        ->reference('users', 'id');
});

以上代码将为MySQL生成以下内容(假设用户表存在且包含ID列)

CREATE TABLE my_table(
    id INT AUTO_INCREMENT
    user INT(11),
    details TEXT,
    PRIMARY KEY ix_id (id),
    FOREIGN INDEX custom_keyname (user) REFERENCES users(id)
);

查看外键文档

创建和删除表格

您可以使用任何引擎填充构建器。此软件包包含的DB_Delta_Engine引擎在内部使用WordPress的dbDelta函数来创建和删除表格。

创建

$schema = new Schema('table', function(Schema $schema): void{
    ... create schema ...
});

// Create instance of builder with DB Delta engine.
$engine  = new DB_Delta_Engine($wpdb);
$builder = new Builder($engine);

// Create table.
try{
    // Returns true for success, false for WPDB errors being present.
    $response = $builder->create_table($schema);
} catch (\Exception $e) {
    // Do something to catch validation errors.
}

删除

$schema = new Schema('table', function(Schema $schema): void{
    ... create schema ...
});

// Create instance of builder with DB Delta engine.
$engine  = new DB_Delta_Engine($wpdb);
$builder = new Builder($engine);

// Create table.
try{
    // Returns true for success, false for WPDB errors being present.
    $response = $builder->drop_table($schema);
} catch (\Exception $e) {
    // Do something to catch validation errors.
}

许可证

MIT许可证

https://open-source.org.cn/licenses/mit-license.html

变更日志

  • 1.2.0 - 添加了helper方法unsigned_big()(感谢iniznet),更新了dev依赖和GH管道。
  • 1.1.0 - 添加了对JSON列的支持,修复了浮点列的精度问题,改进了文档(感谢ZebulanStanphill
  • 1.0.0 - 在引擎接口和wpdb实现中增加了2个新方法,用于返回创建和删除表所使用的查询。
  • 0.3.0 - 改变了API的工作方式;一些外部组件已更改。不再接受完全流畅的创建,并且索引/外键已分离。
  • 0.2.2 - 没有变化,分支很混乱。
  • 0.2.1 - 增加了更多测试,现在测试覆盖率达到了100%。在列、表名和索引周围增加了更多验证。之前对于缺失或格式不正确的数据会抛出PHP错误。现在如果表没有名称,列缺少键、null、类型或长度,以及所有作为外键的索引都必须有一个有效的引用表和列,则会抛出异常。没有修改公共方法。
  • 0.2.0 - 移至Composer,将所有命名空间重命名以匹配Composer格式。

贡献

如果您想为此项目做出贡献,请自由创建问题,然后提交PR。

Glynn Quelch
ZebulanStanphill