zend-blog-3-backend
78 строк · 2.6 Кб
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Schema\Schema;
6use Doctrine\Migrations\AbstractMigration;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10/**
11* Auto-generated Migration: Please modify to your needs!
12*/
13class Version20150620132229 extends AbstractMigration implements ContainerAwareInterface
14{
15/**
16* @var ContainerInterface
17*/
18protected $container;
19
20/**
21* @param ContainerInterface|null $container
22*/
23public function setContainer(ContainerInterface $container = null)
24{
25$this->container = $container;
26}
27
28/**
29* @param Schema $schema
30*/
31public function up(Schema $schema): void
32{
33// this up() migration is auto-generated, please modify it to your needs
34$this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.');
35
36$this->addSql('DROP TABLE avatar');
37$this->addSql('DROP PROCEDURE IF EXISTS `update_comments_count`');
38}
39
40public function postUp(Schema $schema): void
41{
42parent::postUp($schema);
43
44$sql = '
45CREATE PROCEDURE `update_comments_count`(IN topicID INT UNSIGNED)
46BEGIN
47DECLARE count_comments INT DEFAULT 0;
48
49SELECT COUNT( id ) INTO count_comments
50FROM `comments`
51WHERE (`post_id` = topicID) AND (`deleted` = 0);
52
53UPDATE `posts_counts`
54SET `comments` = count_comments
55WHERE `posts_counts`.`post_id` = topicID;
56
57SELECT count_comments;
58END';
59
60$em = $this->container->get('doctrine.orm.entity_manager');
61$stmt = $em->getConnection()->prepare($sql);
62$stmt->execute();
63
64$this->write(' <comment>-></comment> CREATE PROCEDURE `update_comments_count`');
65}
66
67/**
68* @param Schema $schema
69*/
70public function down(Schema $schema): void
71{
72// this down() migration is auto-generated, please modify it to your needs
73$this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.');
74
75$this->addSql('DROP PROCEDURE IF EXISTS `update_comments_count`');
76$this->addSql('CREATE TABLE avatar (id INT AUTO_INCREMENT NOT NULL, hash VARCHAR(32) NOT NULL, `default` SMALLINT NOT NULL, src VARCHAR(48) NOT NULL, last_modified DATETIME NOT NULL, UNIQUE INDEX UNIQ_1677722FD1B862B8 (hash), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
77}
78}
79