cycle/schema-provider

Cycle ORM 模式提供者

1.0.0 2024-02-05 13:58 UTC

This package is auto-updated.

Last update: 2024-09-08 09:32:48 UTC


README

PHP Version Require Latest Stable Version phpunit psalm Total Downloads psalm-level Scrutinizer Code Quality Codecov

Cycle ORM 使用实现 Cycle\ORM\SchemaInterface 接口的对象作为模式。此模式可以从具有特定结构的 PHP 数组构建。本包提供从不同来源构建模式的全套解决方案。它包括一组实现 Cycle\Schema\Provider\SchemaProviderInterface 接口的提供者。这些提供者被分组在 Cycle\Schema\Provider\Support\SchemaProviderPipeline 中。

此管道按预定顺序依次执行提供者的操作。如果其中一个提供者返回了模式,则后续提供者不会执行。

要求

确保您的服务器已配置以下 PHP 版本和扩展

  • PHP >=8.0

安装

您可以通过 Composer 安装此包

composer require cycle/schema-provider

使用

让我们通过使用此包创建模式的简单示例来探索。例如,我们有两个 php 文件 schema1.phpschema2.php 中的模式。在这种情况下,我们可以使用 Cycle\Schema\Provider\FromFilesSchemaProvider 从多个文件构建模式。在提供者之前,我们可以添加一个 Cycle\Schema\Provider\SimpleCacheSchemaProvider,它能够缓存模式。在后续的模式构建中,此提供者从缓存中检索模式,从而无需使用 FromFilesSchemaProvider 来构建模式。

use Cycle\ORM\Schema;
use Cycle\Schema\Provider\FromFilesSchemaProvider;
use Cycle\Schema\Provider\SimpleCacheSchemaProvider;
use Cycle\Schema\Provider\Support\SchemaProviderPipeline;

$pipeline = (new SchemaProviderPipeline($container))->withConfig([
    SimpleCacheSchemaProvider::class => SimpleCacheSchemaProvider::config(key: 'cycle-schema'),
    FromFilesSchemaProvider::class => FromFilesSchemaProvider::config(files: [
        'runtime/schema1.php',
        'runtime/schema2.php',
    ]),
]);

$schema = new Schema($pipeline->read());

SimpleCacheSchemaProvider 需要实现 Psr\SimpleCache\CacheInterface 的实现,这必须在您的容器中定义。它使用此接口来检索和存储模式数组。或者,您可以使用 Cycle\Schema\Provider\PhpFileSchemaProvider,它可以将模式保存到 PHP 文件中。

从不同提供者构建 DB 模式

要合并从不同提供者获得的模式部分,请使用 Cycle\Schema\Provider\MergeSchemaProvider

use Cycle\ORM\Schema;
use Cycle\Schema\Provider\FromFilesSchemaProvider;
use Cycle\Schema\Provider\SimpleCacheSchemaProvider;
use Cycle\Schema\Provider\MergeSchemaProvider;
use Cycle\Schema\Provider\Support\SchemaProviderPipeline;

$pipeline = (new SchemaProviderPipeline($container))->withConfig([
    SimpleCacheSchemaProvider::class => SimpleCacheSchemaProvider::config(key: 'cycle-schema'),
    MergeSchemaProvider::class => [
        FromFilesSchemaProvider::class => FromFilesSchemaProvider::config(files: [
            'runtime/schema1.php',
            'runtime/schema2.php',
        ]),
        CustomSchemaProvider::class => ['some' => 'config'],
    ],
]);

$schema = new Schema($pipeline->read());

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE。由 Spiral Scout 维护。