pinkcrab / table_builder
用于定义表格模式并在大多数SQL数据库中创建表格。
Requires
- php: >=7.2.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: *
- gin0115/wpunit-helpers: ~1
- php-stubs/wordpress-stubs: ^6.0 || ^5.9
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^7.0 || ^8.0
- roots/wordpress: ^6.1
- symfony/var-dumper: *
- szepeviktor/phpstan-wordpress: ^1.0
- vlucas/phpdotenv: ^5.4
- wp-coding-standards/wpcs: *
- wp-phpunit/wp-phpunit: ^6.1
- yoast/phpunit-polyfills: ^0.2.0 || ^1.0.0
- dev-master
- 1.2.0
- 1.1.0
- 1.0.0
- 0.3.0
- 0.3.0-beta
- 0.2.2
- 0.2.1
- 0.2.1-beta
- dev-develop
- dev-feature/gh37-readd-mysql-versions-to-pipelines
- dev-feature/gh30-add-gitattributes
- dev-feature/gh33-update-dev-deps-and-pipelines
- dev-feature/fix-test-for-docs-with-big-int
- dev-feature/gh12-update-docs-for-1.1
- dev-feature/gh11-reintroduce-builder-exceptions
- dev-feature/gh17-access-engine-builder
- dev-feature/gh16-replace-truthy-checks
- dev-feature/gh18-add-json-support
- dev-feature/gh20-update-testing-deps
- dev-feature/ISSUE_3--remove-framework-from-compoer-requires
This package is auto-updated.
Last update: 2024-08-30 01:39:36 UTC
README
一个链式表格模式构造器,内置(WPDB) DB Delta构建器。
为什么?
对于那些曾经使用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。