1. Go to this page and download the library: Download lucinda/migrations 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/ */
lucinda / migrations example snippets
// defines folder to store migrations and creates it if not exists
$folder = "migrations";
if (!file_exists($folder)) {
mkdir($folder);
}
// TODO: instance a Lucinda\Migration\Cache into $cache variable
// run migrations based on console input
$executor = new Lucinda\Migration\ConsoleExecutor($folder, $cache);
$executor->execute((isset($argv[1])?$argv[1]:"migrate"), (isset($argv[2])?$argv[2]:""));
class TableCache implements \Lucinda\Migration\Cache
{
private $tableName;
public function __construct(string $tableName)
{
$this->tableName = $tableName;
}
public function exists(): bool
{
return !empty(SQL("SHOW TABLES LIKE '".$this->tableName."'")->toRow());
}
public function create(): void
{
SQL("
CREATE TABLE ".$this->tableName."
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
class_name VARCHAR(255) NOT NULL,
is_successful BOOLEAN NOT NULL DEFAULT TRUE,
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id),
UNIQUE(class_name)
) Engine=INNODB");
}
public function read(): array
{
return SQL("SELECT class_name, IF(is_successful=0,2,3) AS status FROM ".$this->tableName."")->toMap("class_name", "status");
}
public function add(string $className, int $statusCode): void
{
$isSuccessful = ($statusCode==\Lucinda\Migration\Status::PASSED);
$results = SQL("UPDATE ".$this->tableName." SET is_successful=:status, date=NOW() WHERE class_name=:name", [
":status"=>$isSuccessful,
":name"=>$className
])->getAffectedRows();
if ($results == 0) {
SQL("INSERT INTO ".$this->tableName." SET is_successful=:status, class_name=:name", [
":status"=>$isSuccessful,
":name"=>$className
]);
}
}
public function remove(string $className): void
{
SQL("DELETE FROM ".$this->tableName." WHERE class_name=:name", [":name"=>$className]);
}
}
// loads dependencies that bind Cache and Script to SQL Data Access API
reates it if not exists
$folder = "migrations";
if (!file_exists($folder)) {
mkdir($folder);
}
// sets up Lucinda SQL Data Access API for current development environment based on XML
new Lucinda\SQL\Wrapper(simplexml_load_file("xml/servers.xml"), getenv("ENVIRONMENT"));
// run migrations based on console input, saving cache to SQL table "migrations"
$executor = new Lucinda\Migration\ConsoleExecutor($folder, new TableCache("migrations"));
$executor->execute((isset($argv[1])?$argv[1]:"migrate"), (isset($argv[2])?$argv[2]:""));
class Version20210205105634 implements \Lucinda\Migration\Script
{
public function up(): void
{
SQL("
CREATE TABLE test(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
primary key(id)
) ENGINE=INNODB
")
}
public function up(): void
{
SQL("DROP TABLE test");
}
}
bash
cd vendor/lucinda/migrations
php test.php
bash
> php migrations.php generate
bash
> php migrations.php migrate
bash
> php migrations.php up Version20210205105634
bash
> php migrations.php down Version20210205105634
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.