|
5 | 5 | use Doctrine\DBAL\Schema\Schema;
|
6 | 6 | use Mautic\CoreBundle\Doctrine\AbstractMauticMigration;
|
7 | 7 |
|
8 |
| -/** |
9 |
| - * Auto-generated Migration: Please modify to your needs! |
10 |
| - */ |
11 |
| -class Version20190724110039 extends AbstractMauticMigration |
| 8 | +final class Version20190724110039 extends AbstractMauticMigration |
12 | 9 | {
|
| 10 | + private const LEADS_TABLE = 'leads'; |
| 11 | + private const LEAD_FIELDS_TABLE = 'lead_fields'; |
| 12 | + |
| 13 | + /** |
| 14 | + * Change multiselect custom fields from VARCHAR(191) to TEXT. |
| 15 | + */ |
13 | 16 | public function up(Schema $schema): void
|
14 | 17 | {
|
15 |
| - // Change multiselect custom fields from VARCHAR(255) to TEXT |
16 |
| - $qb = $this->connection->createQueryBuilder(); |
17 |
| - $qb->select('lf.alias') |
18 |
| - ->from($this->prefix.'lead_fields', 'lf') |
19 |
| - ->where( |
20 |
| - $qb->expr()->eq('lf.type', $qb->expr()->literal('multiselect')) |
21 |
| - ); |
22 |
| - $multiselectFields = $qb->execute()->fetchAll(); |
23 |
| - |
24 |
| - $leadsTable = $schema->getTable($this->prefix.'leads'); |
| 18 | + $multiselectFields = $this->getMultiselectFields(); |
| 19 | + $leadsTable = $schema->getTable($this->prefix.self::LEADS_TABLE); |
| 20 | + $changeStatements = []; |
25 | 21 |
|
26 | 22 | if (!empty($multiselectFields)) {
|
27 | 23 | foreach ($multiselectFields as $field) {
|
28 | 24 | if ($leadsTable->hasColumn($field['alias'])) {
|
29 | 25 | if ($leadsTable->hasIndex("{$this->prefix}{$field['alias']}_search")) {
|
30 |
| - $this->addSql("DROP INDEX `{$this->prefix}{$field['alias']}_search` ON `{$this->prefix}leads`"); |
| 26 | + $changeStatements[] = "DROP INDEX `{$this->prefix}{$field['alias']}_search`"; |
| 27 | + } |
| 28 | + if (!empty($this->prefix) && $leadsTable->hasIndex("{$field['alias']}_search")) { |
| 29 | + $changeStatements[] = "DROP INDEX `{$field['alias']}_search`"; |
31 | 30 | }
|
32 |
| - $this->addSql("ALTER TABLE `{$this->prefix}leads` CHANGE `{$field['alias']}` `{$field['alias']}` TEXT"); |
| 31 | + $changeStatements[] = "CHANGE `{$field['alias']}` `{$field['alias']}` TEXT"; |
33 | 32 | }
|
34 | 33 | }
|
| 34 | + |
| 35 | + if (!empty($changeStatements)) { |
| 36 | + $this->addSql('SET innodb_strict_mode = OFF;'); |
| 37 | + $this->addSql('ALTER TABLE `'.$this->prefix.self::LEADS_TABLE.'` '.implode(', ', $changeStatements)); |
| 38 | + $this->addSql('SET innodb_strict_mode = ON;'); |
| 39 | + } |
35 | 40 | }
|
36 | 41 | }
|
37 | 42 |
|
| 43 | + /** |
| 44 | + * Change multiselect custom fields from VARCHAR(191) to TEXT. |
| 45 | + */ |
38 | 46 | public function down(Schema $schema): void
|
39 | 47 | {
|
40 |
| - // Change multiselect custom fields from VARCHAR(255) to TEXT |
41 |
| - $qb = $this->connection->createQueryBuilder(); |
42 |
| - $qb->select('lf.alias') |
43 |
| - ->from($this->prefix.'lead_fields', 'lf') |
44 |
| - ->where( |
45 |
| - $qb->expr()->eq('lf.type', $qb->expr()->literal('multiselect')) |
46 |
| - ); |
47 |
| - $multiselectFields = $qb->execute()->fetchAll(); |
48 |
| - |
49 |
| - $leadsTable = $schema->getTable($this->prefix.'leads'); |
| 48 | + $multiselectFields = $this->getMultiselectFields(); |
| 49 | + $leadsTable = $schema->getTable($this->prefix.self::LEADS_TABLE); |
| 50 | + $changeStatements = []; |
50 | 51 |
|
51 | 52 | if (!empty($multiselectFields)) {
|
52 | 53 | foreach ($multiselectFields as $field) {
|
53 | 54 | if ($leadsTable->hasColumn($field['alias'])) {
|
54 |
| - $this->addSql("ALTER TABLE `{$this->prefix}leads` CHANGE `{$field['alias']}` `{$field['alias']}` VARCHAR(255)"); |
| 55 | + $changeStatements[] = "CHANGE `{$field['alias']}` `{$field['alias']}` VARCHAR(191)"; |
55 | 56 | if (!$leadsTable->hasIndex("{$this->prefix}{$field['alias']}_search")) {
|
56 |
| - $this->addSql("CREATE INDEX `{$this->prefix}{$field['alias']}_search` ON `{$this->prefix}leads`(`{$field['alias']}`)"); |
| 57 | + $changeStatements[] = "ADD INDEX `{$this->prefix}{$field['alias']}_search` (`{$field['alias']}`)"; |
57 | 58 | }
|
58 | 59 | }
|
59 | 60 | }
|
| 61 | + |
| 62 | + if (!empty($changeStatements)) { |
| 63 | + $this->addSql('ALTER TABLE `'.$this->prefix.self::LEADS_TABLE.'` '.implode(', ', $changeStatements)); |
| 64 | + } |
60 | 65 | }
|
61 | 66 | }
|
| 67 | + |
| 68 | + /** |
| 69 | + * @return array<array<string, mixed>> |
| 70 | + */ |
| 71 | + private function getMultiselectFields(): array |
| 72 | + { |
| 73 | + $qb = $this->connection->createQueryBuilder(); |
| 74 | + $qb->select('lf.alias') |
| 75 | + ->from($this->prefix.self::LEAD_FIELDS_TABLE, 'lf') |
| 76 | + ->where( |
| 77 | + $qb->expr()->eq('lf.type', $qb->expr()->literal('multiselect')) |
| 78 | + ); |
| 79 | + |
| 80 | + return $qb->execute()->fetchAll(); |
| 81 | + } |
62 | 82 | }
|
0 commit comments