<?php
use Doctrine\ORM\Tools\SchemaTool;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\ORM\Mapping as A;
use PHPSnippets\Db\Entity\Test;
use SqlFormatter;
/**
* @A\Entity
* @A\Table(name="budgie")
*/
class Budgie
{
/**
* @A\Column(type="integer")
* @A\Id
* @A\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @A\Column(type="string")
*/
public $name;
}
$tool = new SchemaTool($entityManager);
$classes = array(
$entityManager->getClassMetadata(Budgie::CLASS),
$entityManager->getClassMetadata(Test::CLASS),
);
$queries = $tool->getCreateSchemaSql($classes);
echo 'createSchema($classes) does:' . PHP_EOL;
format_queries($queries);
$queries = $tool->getDropSchemaSQL($classes);
echo 'dropSchema($classes) does:' . PHP_EOL;
format_queries($queries);
// updateSchema($classes) creates a query to
// sync the differences between DB and Entity.
// That's why an update can be an create statement too
$queries = $tool->getUpdateSchemaSql($classes);
echo 'updateSchema($classes) does:' . PHP_EOL;
format_queries($queries);
function format_queries(array $queries) {
foreach ($queries as $query) {
echo trim(SqlFormatter::format($query));
}
}
CREATE TABLE budgie ( id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB
CREATE TABLE test ( id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, creation_date DATETIME DEFAULT NULL, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDBdropSchema($classes) does:
DROP TABLE testupdateSchema($classes) does:
CREATE TABLE budgie ( id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB