inpsyde /wp-db-tools
提供对MySQL数据库的独立于引擎的简化接口。
Requires (Dev)
- inpsyde/monkery-test-case: ^3.0
- inpsyde/wordpress-dev: ^4.4
- inpsyde/wp-tests-starter: ^1.0
This package is auto-updated.
Last update: 2021-06-23 21:26:32 UTC
README
用于管理MySQL表的API(创建、删除、复制)。提供对wpdb
的适配器(并计划也支持PDO
)。
进行中!您应仅使用离散版本(0.1.0、…)并遵循CHANGELOG.md。预发布版本(0.2.0、0.3.0、…)中可能存在破坏性更改。在您的composer版本约束中使用波浪号操作符:~0.1.0
以仅获取“错误修复”级别的发布。
安装
composer require inpsyde/wp-db-tools:~0.1.0
使用示例
YAML表架构
创建一个名为 my_table.yml
的文件,并指定表架构如下
table: name: my_table # Prefix is optional but if specified only the two values # 'network' and 'site' are allowed prefix: network schema: id: name: id description: BIGINT NOT NULL title: name: title description: VARCHAR(255) primary_key: - id indices: my_index: name: my_index description: UNIQUE my_index (title)
这将产生以下SQL语句
CREATE TABLE `wp_my_table` ( `id` BIGINT NOT NULL, `title` VARCHAR(255), PRIMARY KEY (`id_column`), UNIQUE my_index (title) )
API将使用带重音符号的引号(反引号 `
U+0060)引用标识符,以区分它们。这将适用于大多数用例。但是,如果您想在标识符(索引名称和定义)中使用需要引号的字符,可以使用引用内部键的占位符
table: name: merkel_table-<>- schema: id: name: "id (hopefully_unique*lol*)" description: BIGINT NOT NULL title: name: "title (super_important_for_SEO!!!)" description: VARCHAR(255) primary_key: - id indices: my_index: name: "my_index (note to dev-ops: this will scale much better)" description: "UNIQUE %% (%title%)"
这将产生以下SQL语句
CREATE TABLE `merkel_table-<>-` ( `id (hopefully_unique*lol*)` BIGINT NOT NULL, `title (super_important_for_SEO!!!)` VARCHAR(255), PRIMARY KEY (`id (hopefully_unique*lol*)`), UNIQUE `my_index_(note to dev-ops: this will scale much better)` (`title (super_important_for_SEO!!!)`) )
主键必须始终引用架构中每个列的关联键(在示例中为id
而不是实际名称)。
在索引描述中,允许使用以下占位符
%%
将被替换为引号的索引名称%<column_key>%
将被替换为架构中引用的列的引号名称
创建表API
use WpDbTools\Action\MySqlTableCreator; use WpDbTools\Db\WpDbAdapter; use WpDbTools\Factory\TableSchemaFactory; $table_creator = new MySqlTableCreator( WpDbAdapter::from_globals() ); $schema_factory = TableSchemaFactory::from_globals(); $table_schema = $schema_factory->create_from_yaml_file( 'config/my_table.yml' ); $table_creator->create_table( $table_schema );
临时/如果不存在标志
如果要将SQL语句包含TEMPORARY
或IF NOT EXISTS
选项,可以将它们以位运算传递给MySqlTableCreator
构造函数
use WpDbTools\Action\MySqlTableCreator; use WpDbTools\Db\WpDbAdapter; $table_creator = new MySqlTableCreator( WpDbAdapter::from_globals(), MySqlTableCreator::TEMPORARY | MySqlTableCreator::IF_NOT_EXISTS );
这将产生以下SQL语句
CREATE TEMPORARY TABLE IF NOT EXISTS `my_table` …
复制一个表
use WpDbTools\Action\MySqlTableCopier; use WpDbTools\Action\MySqlTableLookup; use WpDbTools\Db\WpDbAdapter; $adapter = new WpDbAdapter( $GLOBALS[ 'wpdb' ] ); $copier = new MySqlTableCopier( $adapter ); $lookup = new MySqlTableLookup( $adapter ); // copy table structure if ( ! $lookup->table_exists( 'wp_options_copy' ) ) $copier->copy_structure( 'wp_options', 'wp_options_copy' ); // copy table and content if ( ! $lookup->table_exists( 'wp_posts_copy' ) ) $copier->copy( 'wp_posts', 'wp_posts_copy' );
路线图
- 指定位掩码架构以统一用于使用的数据库适配器的选项,如
ARRAY_A
- 用于识别和处理架构更新的API(架构-delta)
- 将WP风格准备语句语法翻译为PDO准备语句语法,反之亦然
运行测试
通过phive在本地安装phpunit
$ phive install
或者安装phpunit版本^5.7
(目前仅支持单元测试,不支持WordPress系统测试的^6.0
)。
运行单元测试
$ tests/bin/phpunit
准备WordPress系统测试:将phpunit-system.xml.dist
复制到phpunit-system.xml
,并插入您的数据库凭据。然后运行
$ tests/bin/phpunit -c phpunit-system.xml
由Inpsyde制作
Inpsyde团队自2006年起就开始从事网站开发。
许可证
版权所有 (c) 2017 Inpsyde GmbH
好消息,此插件对每个人都是免费的!因为它是在MIT许可证下发布的,您可以在个人网站或商业网站上免费使用它。
贡献
欢迎所有反馈/错误报告/拉取请求。