stellarwp/schema

一个用于简化在WordPress中创建和更新自定义表的库。

1.1.7 2024-06-06 17:01 UTC

This package is auto-updated.

Last update: 2024-09-06 17:32:28 UTC


README

CI Static Analysis

一个用于简化在WordPress中创建、更新和字段修改自定义表的库。

安装

我们建议您通过 Composer 将Schema作为项目依赖项安装。

composer require stellarwp/schema

实际上,我们建议使用 Strauss 将此库包含到您的项目中。

幸运的是,将Strauss添加到您的 composer.json 的操作仅比添加典型依赖项稍微复杂一点,所以请查看我们的 strauss 文档

使用前提

要实际使用该模式库,您必须在项目中拥有两个额外的库

  1. 一个与 di52 兼容的依赖注入容器(DI容器)(我们推荐使用di52)。
  2. stellarwp/db 库。

为了使此库尽可能轻量,这些依赖项没有包含在库本身中。为了避免版本兼容性问题,这些库也没有作为Composer依赖项包含。相反,您必须将它们包含到您的项目中。我们建议通过composer 使用Strauss 包含它们,就像您包含此库一样。

所有示例的重要说明

本项目的所有示例都将假定您正在使用 Strauss 为此库提供的命名空间添加前缀。

示例将使用

  • Boom\Shakalaka\ 作为命名空间前缀,尽管有时会简称为 PREFIX\ 以便在文档中简化。
  • BOOM_SHAKALAKA_ 作为常量前缀。

入门指南

为了全面了解此库中可用的内容以及如何使用它,请务必阅读完整的 文档。但对于那些想快速入门的人来说,可以尝试以下步骤。

初始化库

use Boom\Shakalaka\StellarWP\Schema\Config;

// You'll need a Dependency Injection Container that is compatible with https://github.com/lucatume/di52.
use Boom\Shakalaka\lucatume\DI52\Container;

// You'll need to use the StellarWP\DB library for database operations.
use Boom\Shakalaka\StellarWP\DB\DB;

$container = new Boom\Shakalaka\lucatume\DI52\Container();

Config::set_container( $container );
Config::set_db( DB::class );

创建一个表

假设您想要一个名为 sandwiches 的新自定义表(默认情况下,如果使用WP前缀,则为 wp_sandwiches)。您需要一个类文件用于该表。为了这个例子,我们将假设这个类文件位于 Tables/ 目录中,并且可以通过 Boom\Shakalaka\Tables 命名空间访问。

<?php
namespace Boom\Shakalaka\Tables;

use Boom\Shakalaka\StellarWP\Schema\Tables\Contracts\Table;

class Sandwiches extends Table {
	/**
	 * {@inheritdoc}
	 */
	const SCHEMA_VERSION = '1.0.0';

	/**
	 * {@inheritdoc}
	 */
	protected static $base_table_name = 'sandwiches';

	/**
	 * {@inheritdoc}
	 */
	protected static $group = 'boom';

	/**
	 * {@inheritdoc}
	 */
	protected static $schema_slug = 'boom-sandwiches';

	/**
	 * {@inheritdoc}
	 */
	protected static $uid_column = 'id';

	/**
	 * {@inheritdoc}
	 */
	protected function get_definition() {
		global $wpdb;
		$table_name = self::table_name( true );
		$charset_collate = $wpdb->get_charset_collate();

		return "
			CREATE TABLE `{$table_name}` (
				`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
				`name` varchar(50) NOT NULL,
				PRIMARY KEY (`id`)
			) {$charset_collate};
		";
	}
}

以下是属性和方法的意义

  • $base_table_name: 表的名称,不带前缀。
  • $group: 表所属的组 - 这是为了组织目的。
  • $schema_slug: 表的标识符。这用于在 wp_options 中存储您的表的模式版本。
  • $uid_column: 用于唯一标识每行的列名。
  • get_definition():此函数应返回创建您的sandwiches表所使用的SQL基本定义。要获取包含任何字段模式的完整SQL,您可以调用get_sql()

注册表

当您注册表或字段模式时,模式库会自动初始化。要注册您的表,只需在plugins_loaded中调用方便的Register::table()方法即可。

namespace Boom\Shakalaka;

use Boom\Shakalaka\StellarWP\Schema\Register;
use Boom\Shakalaka\Tables\Sandwiches;

add_action( 'plugins_loaded', static function() {
	Register::table( Sandwiches::class );
} );

就这么简单!

plugins_loaded动作期间,将自动注册、创建和更新表,优先级为1000(该优先级数字可通过stellarwp_schema_up_plugins_loaded_priority过滤器进行筛选)

文档

以下是更多高级文档,帮助您更深入地使用此库

  1. 设置Strauss
  2. 模式管理
  3. 表模式
    1. 版本控制
    2. 注册表
    3. 注销表
    4. 表集合
    5. 公开可访问的方法
  4. 字段模式
    1. 版本控制
    2. 注册字段
    3. 注销字段
    4. 字段集合
    5. 公开可访问的方法
  5. 自动化测试

致谢

特别感谢@lucatume@stratease在将其提取为独立库之前对这一结构的初始工作。