/**
  * @dataProvider setTableOptionsProvider
  */
 public function testSetTableOptions($tableName, array $options, array $prevValues, array $expected)
 {
     if (!empty($prevValues)) {
         $this->setProtectedProperty($this->manager, 'options', $prevValues);
     }
     $this->manager->setTableOptions($tableName, $options);
     $this->assertEquals($expected, $this->manager->getExtendOptions());
 }
Exemple #2
0
 /**
  * @param string $name
  * @param mixed  $value Can be scalar type, array or OroOptions object
  *
  * @return \Doctrine\DBAL\Schema\Table
  */
 public function addOption($name, $value)
 {
     if ($name === OroOptions::KEY) {
         if ($value instanceof OroOptions) {
             $value = $value->toArray();
         }
         $this->extendOptionsManager->setTableOptions($this->getName(), $value);
         return $this;
     }
     return parent::addOption($name, $value);
 }
 /**
  * Adds the inverse side of a many-to-one relation
  *
  * @param Schema       $schema
  * @param Table|string $table                     A Table object or table name
  * @param string       $associationName           The name of a relation field
  * @param Table|string $targetTable               A Table object or table name
  * @param string       $targetAssociationName     The name of a relation field on the inverse side
  * @param string[]     $targetTitleColumnNames    Column names are used to show a title of related entity
  * @param string[]     $targetDetailedColumnNames Column names are used to show detailed info about related entity
  * @param string[]     $targetGridColumnNames     Column names are used to show related entity in a grid
  * @param array        $options                   Entity config values
  *                                                format is [CONFIG_SCOPE => [CONFIG_KEY => CONFIG_VALUE]]
  */
 public function addManyToOneInverseRelation(Schema $schema, $table, $associationName, $targetTable, $targetAssociationName, array $targetTitleColumnNames, array $targetDetailedColumnNames, array $targetGridColumnNames, array $options = [])
 {
     $this->ensureExtendFieldSet($options);
     $selfTableName = $this->getTableName($table);
     $selfClassName = $this->getEntityClassByTableName($selfTableName);
     $targetTableName = $this->getTableName($targetTable);
     $targetTable = $this->getTable($targetTable, $schema);
     $targetClassName = $this->getEntityClassByTableName($targetTableName);
     $this->checkColumnsExist($targetTable, $targetTitleColumnNames);
     $this->checkColumnsExist($targetTable, $targetDetailedColumnNames);
     $this->checkColumnsExist($targetTable, $targetGridColumnNames);
     $relationKey = ExtendHelper::buildRelationKey($selfClassName, $associationName, RelationType::MANY_TO_ONE, $targetClassName);
     $targetFieldId = new FieldConfigId('extend', $targetClassName, $targetAssociationName, RelationType::ONE_TO_MANY);
     $selfTableOptions['extend']['relation.' . $relationKey . '.target_field_id'] = $targetFieldId;
     $this->extendOptionsManager->setTableOptions($selfTableName, $selfTableOptions);
     $targetTableOptions['extend']['relation.' . $relationKey . '.field_id'] = $targetFieldId;
     $this->extendOptionsManager->setTableOptions($targetTableName, $targetTableOptions);
     $options[ExtendOptionsManager::TARGET_OPTION] = ['table_name' => $selfTableName, 'relation_key' => $relationKey, 'columns' => ['title' => $targetTitleColumnNames, 'detailed' => $targetDetailedColumnNames, 'grid' => $targetGridColumnNames]];
     $options[ExtendOptionsManager::TYPE_OPTION] = RelationType::ONE_TO_MANY;
     $this->extendOptionsManager->setColumnOptions($targetTableName, $targetAssociationName, $options);
 }