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 GenerateSchemaEventArgs $args */ public function postGenerateSchema(GenerateSchemaEventArgs $args) { $schema = $args->getSchema(); try { if (!$schema->hasTable(MAUTIC_TABLE_PREFIX . 'lead_fields')) { return; } $objects = ['lead' => 'leads', 'company' => 'companies']; foreach ($objects as $object => $tableName) { $table = $schema->getTable(MAUTIC_TABLE_PREFIX . $tableName); //get a list of fields $fields = $args->getEntityManager()->getConnection()->createQueryBuilder()->select('f.alias, f.is_unique_identifer as is_unique, f.type, f.object')->from(MAUTIC_TABLE_PREFIX . 'lead_fields', 'f')->where("f.object = '{$object}'")->orderBy('f.field_order', 'ASC')->execute()->fetchAll(); // Compile which ones are unique identifiers // Email will always be included first $uniqueFields = 'lead' === $object ? ['email' => 'email'] : ['companyemail' => 'companyemail']; foreach ($fields as $f) { if ($f['is_unique'] && $f['alias'] != 'email') { $uniqueFields[$f['alias']] = $f['alias']; } $columnDef = FieldModel::getSchemaDefinition($f['alias'], $f['type'], !empty($f['is_unique'])); $table->addColumn($columnDef['name'], $columnDef['type'], $columnDef['options']); if ('text' != $columnDef['type']) { $table->addIndex([$columnDef['name']], MAUTIC_TABLE_PREFIX . $f['alias'] . '_search'); } } // Only allow indexes for string types $columns = $table->getColumns(); /** @var \Doctrine\DBAL\Schema\Column $column */ foreach ($columns as $column) { $type = $column->getType(); $name = $column->getName(); if (!$type instanceof StringType) { unset($uniqueFields[$name]); } elseif (isset($uniqueFields[$name])) { $uniqueFields[$name] = $uniqueFields[$name]; } } if (count($uniqueFields) > 1) { // Only use three to prevent max key length errors $uniqueFields = array_slice($uniqueFields, 0, 3); $table->addIndex($uniqueFields, MAUTIC_TABLE_PREFIX . 'unique_identifier_search'); } switch ($object) { case 'lead': $table->addIndex(['attribution', 'attribution_date'], MAUTIC_TABLE_PREFIX . 'contact_attribution'); break; case 'company': $table->addIndex(['companyname', 'companyemail'], MAUTIC_TABLE_PREFIX . 'company_filter'); $table->addIndex(['companyname', 'companycity', 'companycountry', 'companystate'], MAUTIC_TABLE_PREFIX . 'company_match'); break; } } } catch (\Exception $e) { //table doesn't exist or something bad happened so oh well $this->logger->addError('SCHEMA ERROR: ' . $e->getMessage()); } }
public function postGenerateSchema(\Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs $event) { $schema = $event->getSchema(); // When using multiple entity managers ignore events that are triggered by other entity managers. if ($event->getEntityManager()->getMetadataFactory()->isTransient('JMS\\JobQueueBundle\\Entity\\Job')) { return; } $table = $schema->createTable('jms_job_related_entities'); $table->addColumn('job_id', 'bigint', array('nullable' => false, 'unsigned' => true)); $table->addColumn('related_class', 'string', array('nullable' => false, 'length' => '150')); $table->addColumn('related_id', 'string', array('nullable' => false, 'length' => '100')); $table->setPrimaryKey(array('job_id', 'related_class', 'related_id')); $table->addForeignKeyConstraint('jms_jobs', array('job_id'), array('id')); }
public function postGenerateSchema(GenerateSchemaEventArgs $event) { $schema = $event->getSchema(); // When using multiple entity managers ignore events that are triggered by other entity managers. if ($event->getEntityManager()->getMetadataFactory()->isTransient('JMS\\JobQueueBundle\\Entity\\Job')) { return; } $table = $schema->createTable('jms_job_statistics'); $table->addColumn('job_id', 'bigint', array('nullable' => false, 'unsigned' => true)); $table->addColumn('characteristic', 'string', array('length' => 30, 'nullable' => false)); $table->addColumn('createdAt', 'datetime', array('nullable' => false)); $table->addColumn('charValue', 'float', array('nullable' => false)); $table->setPrimaryKey(array('job_id', 'characteristic', 'createdAt')); }