Cycle ORM uses an object implementing the Cycle\ORM\SchemaInterface
interface as a schema.
This schema can be constructed from a PHP array with a specific structure. The package at hand offers a comprehensive
solution for building a schema from different sources. It includes a collection of providers that implements the
Cycle\Schema\Provider\SchemaProviderInterface
interface. These providers are grouped in the
Cycle\Schema\Provider\Support\SchemaProviderPipeline
.
This pipeline orchestrates the execution of providers in a predetermined order, one after another. If one of the providers returns the schema, subsequent providers are not executed.
Make sure that your server is configured with the following PHP versions and extensions:
- PHP >=8.0
You can install the package via Composer:
composer require cycle/schema-provider
Let's explore a straightforward example of schema creation using this package. For example, we have a schema in
two php files schema1.php and schema2.php. In this scenario, we can use the
Cycle\Schema\Provider\FromFilesSchemaProvider
to build the schema from multiple files. Before this provider,
we can add a Cycle\Schema\Provider\SimpleCacheSchemaProvider
, capable of caching the schema. Upon subsequent schema
builds, this provider retrieves the schema from the cache, eliminating the need to build the schema using
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());
The SimpleCacheSchemaProvider
requires an implementation of Psr\SimpleCache\CacheInterface
, which must be defined
in your container. It uses this interface to retrieve and store the schema array. Alternatively, you can use the
Cycle\Schema\Provider\PhpFileSchemaProvider
, which can save the schema to a PHP file.
To merge schema parts obtained from different providers, use 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());
The MIT License (MIT). Please see LICENSE
for more information.
Maintained by Spiral Scout.