/** * @param GenerateSchemaTableEventArgs $eventArgs * * @throws \Exception */ public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs) { $cm = $eventArgs->getClassMetadata(); if (!$this->annotationReader->isRevised($cm->name)) { $revised = false; if ($cm->isInheritanceTypeJoined() && $cm->rootEntityName == $cm->name) { foreach ($cm->subClasses as $subClass) { if ($this->annotationReader->isRevised($subClass)) { $revised = true; } } } if (!$revised) { return; } } if (!in_array($cm->inheritanceType, array(ClassMetadataInfo::INHERITANCE_TYPE_NONE, ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE))) { throw new \Exception(sprintf('Inheritance type "%s" is not yet supported', $cm->inheritanceType)); } $schema = $eventArgs->getSchema(); $entityTable = $eventArgs->getClassTable(); $revisionTable = $schema->createTable($entityTable->getName() . '_revisions'); $revisionTable->addColumn('revision_id', 'integer'); $revisionTable->addColumn('rev_type', 'string', array('length' => 4)); foreach ($entityTable->getColumns() as $column) { if (!in_array($column->getName(), $cm->identifier) && !$this->isColumnRevised($cm, $column->getName())) { continue; } /* @var Column $column */ $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false))); } $pkColumns = $entityTable->getPrimaryKey()->getColumns(); $pkColumns[] = 'revision_id'; $revisionTable->setPrimaryKey($pkColumns); }
public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs) { $cm = $eventArgs->getClassMetadata(); if (!$this->metadataFactory->isAudited($cm->name)) { $audited = false; if ($cm->isInheritanceTypeJoined() && $cm->rootEntityName == $cm->name) { foreach ($cm->subClasses as $subClass) { if ($this->metadataFactory->isAudited($subClass)) { $audited = true; } } } if (!$audited) { return; } } $schema = $eventArgs->getSchema(); $entityTable = $eventArgs->getClassTable(); $revisionTable = $schema->createTable($this->config->getTablePrefix() . $entityTable->getName() . $this->config->getTableSuffix()); foreach ($entityTable->getColumns() as $column) { /* @var $column Column */ $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false))); } $revisionTable->addColumn($this->config->getRevisionFieldName(), $this->config->getRevisionIdFieldType()); $revisionTable->addColumn($this->config->getRevisionTypeFieldName(), 'string', array('length' => 4)); if (!in_array($cm->inheritanceType, array(ClassMetadataInfo::INHERITANCE_TYPE_NONE, ClassMetadataInfo::INHERITANCE_TYPE_JOINED, ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE))) { throw new \Exception(sprintf('Inheritance type "%s" is not yet supported', $cm->inheritanceType)); } $pkColumns = $entityTable->getPrimaryKey()->getColumns(); $pkColumns[] = $this->config->getRevisionFieldName(); $revisionTable->setPrimaryKey($pkColumns); }
public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs) { $schema = $eventArgs->getSchema(); $cm = $eventArgs->getClassMetadata(); if ($this->metadataFactory->isAudited($cm->name)) { $schema = $eventArgs->getSchema(); $entityTable = $eventArgs->getClassTable(); $revisionTable = $schema->createTable($this->config->getTablePrefix() . $entityTable->getName() . $this->config->getTableSuffix()); foreach ($entityTable->getColumns() as $column) { /* @var $column Column */ $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false))); } $revisionTable->addColumn($this->config->getRevisionFieldName(), $this->config->getRevisionIdFieldType()); $revisionTable->addColumn($this->config->getRevisionTypeFieldName(), 'string', array('length' => 4)); $pkColumns = $entityTable->getPrimaryKey()->getColumns(); $pkColumns[] = $this->config->getRevisionFieldName(); $revisionTable->setPrimaryKey($pkColumns); } }
public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $args) { switch ($args->getClassMetadata()->getName()) { case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclClass': case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclEntry': case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclObjectIdentity': case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclSecurityIdentity': $tableName = $args->getClassTable()->getName(); $schema = $args->getSchema(); $schema->dropTable($tableName); break; default: } }