public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs) { $schema = $eventArgs->getSchema(); //get the entity meta $meta = $eventArgs->getEntityManager()->getClassMetadata($this->config->getZfcUserEntityClass()); //get the table name from the entity $revisionsTable = $schema->createTable($this->config->getRevisionTableName()); $revisionsTable->addColumn('id', $this->config->getRevisionIdFieldType(), array('autoincrement' => true)); $revisionsTable->addColumn('timestamp', 'datetime'); $revisionsTable->addColumn('note', 'text', array('notnull' => false)); $revisionsTable->addColumn('ipaddress', 'text', array('notnull' => false)); $localColumnNames = array(); $foreignColumnNames = array(); foreach ($meta->getIdentifier() as $primaryKey) { $columnName = $meta->getColumnName($primaryKey); $foreignColumnNames[] = $columnName; $columnName = preg_replace('/user[^a-zA-Z0-9]*/', '', $columnName); $localColumnName = 'user_' . $columnName; $localColumnNames[] = $localColumnName; $fieldType = $meta->getTypeOfField($primaryKey); $revisionsTable->addColumn($localColumnName, $fieldType, array('notnull' => false)); } //add the tablename and primary key from the entity meta $revisionsTable->addForeignKeyConstraint($meta->getTableName(), $localColumnNames, $foreignColumnNames); $revisionsTable->setPrimaryKey(array('id')); }
/** * @param EntityManager $em * @param AuditConfiguration $config * @param MetadataFactory $factory */ public function __construct(EntityManager $em, Configuration $config, MetadataFactory $factory) { $this->em = $em; $this->config = $config; $this->metadataFactory = $factory; $this->platform = $this->em->getConnection()->getDatabasePlatform(); $this->ZfcUserRepository = $this->em->getRepository($config->getZfcUserEntityClass()); }