migrations/Version20220816202727.php line 1

Open in your IDE?
  1. <?php
  2.     declare(strict_types 1);
  3.     namespace DoctrineMigrations;
  4.     use Doctrine\DBAL\Schema\Schema;
  5.     use Doctrine\Migrations\AbstractMigration;
  6.     /**
  7.      * Auto-generated Migration: Please modify to your needs!
  8.      */
  9.     final class Version20220816202727 extends AbstractMigration
  10.     {
  11.         public function getDescription(): string
  12.         {
  13.             return 'View for account balance';
  14.         }
  15.         public function up(Schema $schema): void
  16.         {
  17.             $this->addSql(
  18.                 'CREATE VIEW account_balance AS
  19. SELECT account_id, SUM(amount) as sum
  20. FROM account_changes ac
  21. GROUP BY account_id'
  22.             );
  23.             $this->addSql(
  24.                 'CREATE TRIGGER calculate_balance_on_insert
  25.     AFTER INSERT
  26.     ON account_changes
  27.     FOR EACH ROW
  28. BEGIN
  29.     UPDATE accounts
  30.         LEFT JOIN account_balance ON accounts.id = account_balance.account_id
  31.     SET accounts.balance = IFNULL(account_balance.sum, 0)
  32.     WHERE accounts.id = NEW.account_id;
  33. END;'
  34.             );
  35.             $this->addSql(
  36.                 'CREATE TRIGGER calculate_balance_on_update
  37.     AFTER UPDATE
  38.     ON account_changes
  39.     FOR EACH ROW
  40. BEGIN
  41.     UPDATE accounts
  42.         LEFT JOIN account_balance ON accounts.id = account_balance.account_id
  43.     SET accounts.balance = IFNULL(account_balance.sum, 0)
  44.     WHERE accounts.id IN (NEW.account_id, OLD.account_id);
  45. END;'
  46.             );
  47.             $this->addSql(
  48.                 'CREATE TRIGGER calculate_balance_on_delete
  49.     AFTER DELETE
  50.     ON account_changes
  51.     FOR EACH ROW
  52. BEGIN
  53.     UPDATE accounts
  54.         LEFT JOIN account_balance ON accounts.id = account_balance.account_id
  55.     SET accounts.balance = IFNULL(account_balance.sum, 0)
  56.     WHERE accounts.id = OLD.account_id;
  57. END;'
  58.             );
  59.         }
  60.         public function down(Schema $schema): void
  61.         {
  62.             $this->addSql('DROP VIEW account_balance');
  63.             $this->addSql('DROP TRIGGER calculate_balance_on_insert');
  64.             $this->addSql('DROP TRIGGER calculate_balance_on_update');
  65.             $this->addSql('DROP TRIGGER calculate_balance_on_delete');
  66.         }
  67.     }