我想用不同的名称生成许多相同的表。是否可以使用类似(http://symfony.com/doc/current/book/doctrine.html#add-mapping-information)的映射创建一个实体类,然后运行带参数名称的命令将表创建到数据库中?我已经完成了一个解决方案,但它不是基于实体类。
在构造函数中:
public function __construct()
{
$this->schema = new \Doctrine\DBAL\Schema\Schema();
$this->config = new \Doctrine\DBAL\Configuration();
$this->connection = DriverManager::getConnection($this->connectionParams, $this->config);
$this->queryBuilder = $this->connection->createQueryBuilder();
$this->myPlatform = new MySqlPlatform();
$this->comparator = new \Doctrine\DBAL\Schema\Comparator();
}
比创建功能:
public function setTable($name)
{
$myTable = $this->schema->createTable($name);
$myTable->addColumn("id", "integer", array("unsigned" => true));
$myTable->addColumn("name", "string", array("length" => 32));
$myTable->setPrimaryKey(array("id"));
$myTable->addUniqueIndex(array("name"));
$queries = $this->schema->toSql($this->myPlatform);
$sm = $this->connection->getSchemaManager();
$fromSchema = $sm->createSchema();
$toSchema = $this->schema;
$schemaDiff = $this->comparator->compare($fromSchema, $toSchema);
$queries = $schemaDiff->toSql($this->myPlatform);
$sql = $schemaDiff->toSaveSql($this->myPlatform);
foreach ($sql as $sentence) {
$this->connection->exec($sentence);
}
}
是否有任何其他解决方案基于一个带有映射的类和一个带参数$ table_name的命令来创建具有不同名称的同一个表?我正在使用Symfony 3和Doctrine 2。
答案 0 :(得分:0)
实体类是一个应该与表连接并与之对应的对象。我认为更好的方法是制作一个看起来与您完全一样的EntityAbstractClass,但不使用@ORM \ Table()注释,然后创建扩展EntityAbstractClass的多个实体。
抽象类:
abstract class EntityAbstractClass() {
// your fields here
}
/**
* @ORM\Table(name="first_table")
**/
class FirstEntityClass extends EntityAbstractClass {
}
/**
* @ORM\Table(name="second_table")
**/
class SecondEntityClass extends EntityAbstractClass {
}
等等。您还可以通过保存短文件以编程方式管理它,然后运行架构更新。
您也可以使用Traits代替Abstract Class:
trait MyEntityTrait {
// your fields here like:
/** @ORM\Column() **/
private $name;
}
并在每个新的实体类中:
/**
* @ORM\Table(name="first_table")
**/
class FirstEntityClass {
use MyEntityTrait;
}
...