我想生成许多具有不同名称的相同表。是否可以使用映射创建一个实体类,例如(http://symfony.com/doc/current/book/doctrine.html#add-mapping-information),而不是运行一个带有参数名称的命令来创建表格中的表格?我已经完成了一个解决方案,但它不是基于实体类。
在构造函数中:
public function __construct()
{
$this->schema = new DoctrineDBALSchemaSchema();
$this->config = new DoctrineDBALConfiguration();
$this->connection = DriverManager::getConnection($this->connectionParams, $this->config);
$this->queryBuilder = $this->connection->createQueryBuilder();
$this->myPlatform = new MySqlPlatform();
$this->comparator = new DoctrineDBALSchemaComparator();
}
比创建函数:
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与学说2。
实体类是应该与表相通用的对象。我认为更好的方法是使一个看起来完全像您的EntityAbstractClass,但没有@orm table()注释,然后创建多个扩展您的EntityAbstractClass的实体。
抽象类:
abstract class EntityAbstractClass() {
// your fields here
}
/**
* @ORMTable(name="first_table")
**/
class FirstEntityClass extends EntityAbstractClass {
}
/**
* @ORMTable(name="second_table")
**/
class SecondEntityClass extends EntityAbstractClass {
}
等等。您也可以通过保存简短文件,然后运行架构更新来编程管理。
或者不是抽象类,您可以使用特质:
trait MyEntityTrait {
// your fields here like:
/** @ORMColumn() **/
private $name;
}
以及每个新实体类:
/**
* @ORMTable(name="first_table")
**/
class FirstEntityClass {
use MyEntityTrait;
}
...