| @@ 9-59 (lines=51) @@ | ||
| 6 | use Oro\Bundle\MigrationBundle\Migration\Migration; |
|
| 7 | use Oro\Bundle\MigrationBundle\Migration\QueryBag; |
|
| 8 | ||
| 9 | class OroCRMMagentoBundle implements Migration |
|
| 10 | { |
|
| 11 | /** |
|
| 12 | * Changes account_id to onDelete=CASCADE |
|
| 13 | * |
|
| 14 | * {@inheritdoc} |
|
| 15 | */ |
|
| 16 | public function up(Schema $schema, QueryBag $queries) |
|
| 17 | { |
|
| 18 | $this->changeOnDeleteToCascade( |
|
| 19 | $schema, |
|
| 20 | [ |
|
| 21 | 'orocrm_magento_customer' => ['account_id'], |
|
| 22 | ] |
|
| 23 | ); |
|
| 24 | } |
|
| 25 | ||
| 26 | /** |
|
| 27 | * @param Schema $schema |
|
| 28 | * @param array $data |
|
| 29 | * [ |
|
| 30 | * table name => [column name, ...], |
|
| 31 | * ... |
|
| 32 | * ] |
|
| 33 | */ |
|
| 34 | protected function changeOnDeleteToCascade(Schema $schema, array $data) |
|
| 35 | { |
|
| 36 | foreach ($data as $tableName => $columns) { |
|
| 37 | $table = $schema->getTable($tableName); |
|
| 38 | foreach ($columns as $column) { |
|
| 39 | $foreignKeys = $table->getForeignKeys(); |
|
| 40 | foreach ($foreignKeys as $foreignKey) { |
|
| 41 | $foreignKeyColumns = $foreignKey->getUnquotedLocalColumns(); |
|
| 42 | if ($foreignKeyColumns === [$column]) { |
|
| 43 | if ($foreignKey->getOption('onDelete') !== 'CASCADE') { |
|
| 44 | $table->removeForeignKey($foreignKey->getName()); |
|
| 45 | $table->addForeignKeyConstraint( |
|
| 46 | $foreignKey->getUnqualifiedForeignTableName(), |
|
| 47 | $foreignKeyColumns, |
|
| 48 | $foreignKey->getUnquotedForeignColumns(), |
|
| 49 | ['onDelete' => 'CASCADE', 'onUpdate' => $foreignKey->getOption('onUpdate')] |
|
| 50 | ); |
|
| 51 | } |
|
| 52 | ||
| 53 | break; |
|
| 54 | } |
|
| 55 | } |
|
| 56 | } |
|
| 57 | } |
|
| 58 | } |
|
| 59 | } |
|
| 60 | ||
| @@ 9-60 (lines=52) @@ | ||
| 6 | use Oro\Bundle\MigrationBundle\Migration\Migration; |
|
| 7 | use Oro\Bundle\MigrationBundle\Migration\QueryBag; |
|
| 8 | ||
| 9 | class OroCRMSalesBundle implements Migration |
|
| 10 | { |
|
| 11 | /** |
|
| 12 | * Changes account_id to onDelete=CASCADE |
|
| 13 | * |
|
| 14 | * {@inheritdoc} |
|
| 15 | */ |
|
| 16 | public function up(Schema $schema, QueryBag $queries) |
|
| 17 | { |
|
| 18 | $this->changeOnDeleteToCascade( |
|
| 19 | $schema, |
|
| 20 | [ |
|
| 21 | 'orocrm_sales_b2bcustomer' => ['account_id'], |
|
| 22 | 'orocrm_sales_opportunity' => ['customer_id'], |
|
| 23 | ] |
|
| 24 | ); |
|
| 25 | } |
|
| 26 | ||
| 27 | /** |
|
| 28 | * @param Schema $schema |
|
| 29 | * @param array $data |
|
| 30 | * [ |
|
| 31 | * table name => [column name, ...], |
|
| 32 | * ... |
|
| 33 | * ] |
|
| 34 | */ |
|
| 35 | protected function changeOnDeleteToCascade(Schema $schema, array $data) |
|
| 36 | { |
|
| 37 | foreach ($data as $tableName => $columns) { |
|
| 38 | $table = $schema->getTable($tableName); |
|
| 39 | foreach ($columns as $column) { |
|
| 40 | $foreignKeys = $table->getForeignKeys(); |
|
| 41 | foreach ($foreignKeys as $foreignKey) { |
|
| 42 | $foreignKeyColumns = $foreignKey->getUnquotedLocalColumns(); |
|
| 43 | if ($foreignKeyColumns === [$column]) { |
|
| 44 | if ($foreignKey->getOption('onDelete') !== 'CASCADE') { |
|
| 45 | $table->removeForeignKey($foreignKey->getName()); |
|
| 46 | $table->addForeignKeyConstraint( |
|
| 47 | $foreignKey->getUnqualifiedForeignTableName(), |
|
| 48 | $foreignKeyColumns, |
|
| 49 | $foreignKey->getUnquotedForeignColumns(), |
|
| 50 | ['onDelete' => 'CASCADE', 'onUpdate' => $foreignKey->getOption('onUpdate')] |
|
| 51 | ); |
|
| 52 | } |
|
| 53 | ||
| 54 | break; |
|
| 55 | } |
|
| 56 | } |
|
| 57 | } |
|
| 58 | } |
|
| 59 | } |
|
| 60 | } |
|
| 61 | ||