1. Go to this page and download the library: Download aymdev/fregata 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/ */
aymdev / fregata example snippets
use Fregata\Migration\TaskInterface;
class MyTask implements TaskInterface
{
public function execute() : ?string
{
// perform some verifications, delete temporary data, ...
return 'Optional result message';
}
}
use Doctrine\DBAL\Connection;
use Fregata\Migration\Migrator\Component\PullerInterface;
class Puller implements PullerInterface
{
private Connection $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
public function pull()
{
return $this->connection
->executeQuery('SELECT * FROM my_table')
->fetchAllAssociative();
}
public function count() : ?int
{
return $this->connection
->executeQuery('SELECT COUNT(*) FROM my_table')
->fetchColumn();
}
}
use Doctrine\DBAL\Connection;
use Fregata\Migration\Migrator\Component\PusherInterface;
class Pusher implements PusherInterface
{
private Connection $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
/**
* @return int number of items inserted
*/
public function push($data): int
{
return $this->connection->executeStatement(
'INSERT INTO my_table VALUES (:foo, :bar, :baz)',
[
'foo' => $data['foo'],
'bar' => some_function($data['bar']),
'baz' => 'default value',
]
);
}
}
use Fregata\Migration\Migrator\DependentMigratorInterface;
class DependentMigrator implements DependentMigratorInterface
{
public function getDependencies() : array
{
return [
DependencyMigrator::class,
];
}
// other migrator methods ...
}
use Doctrine\DBAL\Connection;
use Fregata\Migration\Migrator\Component\BatchPullerInterface;
class BatchPulling implements BatchPullerInterface
{
private Connection $connection;
private ?int $count = null;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
public function pull(): \Generator
{
$limit = 50;
$offset = 0;
while ($offset < $this->count()) {
yield $this->connection
->executeQuery(sprintf('SELECT * FROM my_table LIMIT %d, %d', $offset, $limit))
->fetchAllAssociative();
$offset += $limit;
}
}
public function count() : ?int
{
if (null === $this->count) {
$this->count = $this->connection
->executeQuery('SELECT COUNT(*) FROM my_table')
->fetchColumn();
}
return $this->count;
}
}
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Fregata\Adapter\Doctrine\DBAL\ForeignKey\ForeignKey;
use Fregata\Adapter\Doctrine\DBAL\ForeignKey\Migrator\HasForeignKeysInterface;
class ReferencingMigrator implements HasForeignKeysInterface
{
private Connection $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
public function getConnection() : Connection
{
return $this->connection;
}
/**
* List the foreign keys constraints to keep
* @return ForeignKey[]
*/
public function getForeignKeys() : array
{
$constraints = $this->connection->getSchemaManager()->listTableForeignKeys('my_table');
return array_map(
function (ForeignKeyConstraint $constraint) {
return new ForeignKey(
$constraint, // DBAL constraint object
'target_referencing', // name of the referencing table
['fk'] // columns to change to allow NULL (will be set back to NOT NULL in the after task)
);
},
$constraints
);
}
// other migrator methods ...
}
use Doctrine\DBAL\Connection;
use Fregata\Adapter\Doctrine\DBAL\ForeignKey\CopyColumnHelper;
use Fregata\Migration\Migrator\Component\PusherInterface;
class ReferencingForeignKeyPusher implements PusherInterface
{
private Connection $connection;
private CopyColumnHelper $columnHelper;
public function __construct(Connection $connection, CopyColumnHelper $columnHelper)
{
$this->connection = $connection;
$this->columnHelper = $columnHelper;
}
/**
* @return int number of items inserted
*/
public function push($data): int
{
return $this->connection->executeStatement(
sprintf(
'INSERT INTO my_table (column, %s) VALUES (:value, :old_fk)',
$this->columnHelper->localColumn('my_table', 'fk_column')
),
[
'value' => $data['value'],
'old_fk' => $data['fk_column'],
]
);
}
}
shell
php vendor/bin/fregata
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.