1. Go to this page and download the library: Download matthiasnoback/talis-orm library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
matthiasnoback / talis-orm example snippets
use Doctrine\DBAL\Schema\Synchronizer\SingleDatabaseSynchronizer;
use TalisOrm\Schema\AggregateSchemaProvider;
// set up or reuse a Doctrine\DBAL\Connection instance
$connection = ...;
$schemaProvider = new AggregateSchemaProvider($connection, [
// list all the aggregate class names of your application, e.g.
User::class,
Order::class
]);
$synchronizer = new SingleDatabaseSynchronizer($connection);
$synchronizer->createSchema($schemaProvider->createSchema());
final class AggregateMigrationsSchemaProvider implements SchemaProviderInterface
{
/**
* @var AggregateSchemaProvider
*/
private $aggregateSchemaProvider;
public function __construct(AggregateSchemaProvider $aggregateSchemaProvider)
{
$this->aggregateSchemaProvider = $aggregateSchemaProvider;
}
public function createSchema(): Schema
{
return $this->aggregateSchemaProvider->createSchema();
}
}
final class Order implements Aggregate, SpecifiesSchema
{
/**
* @var int
*/
private $aggregateVersion;
public function state(): array
{
// N.B. It's important to increment the version manually every time state() gets called!
$this->aggregateVersion++;
return [
// ...
Aggregate::VERSION_COLUMN => $this->aggregateVersion
];
}
public static function fromState(array $aggregateState, array $childEntityStatesByType): Aggregate
{
$order = new self();
// ...
$order->aggregateVersion = $aggregateState[Aggregate::VERSION_COLUMN];
return $order;
}
/**
* Only if your aggregate implements SpecifiesSchema:
*/
public static function specifySchema(Schema $schema): void
{
$table = $schema->createTable('orders');
// ...
$table->addColumn(Aggregate::VERSION_COLUMN, 'integer');
}
}
final class Order implements Aggregate, SpecifiesSchema
{
// ...
public function setAggregateVersion(int $version): void
{
$this->aggregateVersion = $version;
}
public function aggregateVersion(): int
{
return $this->aggregateVersion;
}
}
/*
* Inside the controller which (for instance) renders a form, allowing the
* user to modify some aspect of the aggregate:
*/
$order = $repository->getById($orderId);
$session->set('aggregate_version', $order->aggregateVersion());
// show form
/*
* Inside the controller which modifies the aggregate based on the data the
* user provided:
*/
$order = $repository->getById($orderId);
$order->setAggregateVersion($session->get('aggregate_version');
$order->makeSomeChange();
// This will compare the provided version to the version in the database:
$repository->save($order);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.