Какой командой Yii создать trigger mysql?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
prot
Сообщения: 34
Зарегистрирован: 2013.12.26, 21:02
Контактная информация:

Какой командой Yii создать trigger mysql?

Сообщение prot »

Всем привет!
Есть следующий триггер.

Код: Выделить всё

$sql = '
DROP TRIGGER IF EXISTS `after_update_client_rating`;
DELIMITER //
CREATE TRIGGER `after_update_client_rating`
AFTER UPDATE ON `order`
FOR EACH ROW
BEGIN
    IF (NEW.rating is not null AND NEW.rating > 0 AND IFNULL(OLD.rating, 0) != NEW.rating) THEN
        UPDATE `user_profile` SET rating_up = IFNULL(rating_up, 0) + NEW.rating WHERE user_id = NEW.user_id;
    ELSEIF (NEW.rating is not null AND NEW.rating < 0 AND IFNULL(OLD.rating, 0) != NEW.rating) THEN
        UPDATE `user_profile` SET rating_down = IFNULL(rating_down, 0) + NEW.rating WHERE user_id = NEW.user_id;
    END IF;
END; //
DELIMITER ;
';
Хочу его создавать/удалять в migrate.
Пробовал запускать эту команду через:

Код: Выделить всё

$this->db->createCommand($sql)->execute();
Но ничего не получилось.
Подскажите, пожалуйста, как запустить эту команду средствами Yii в migrate?
Аватара пользователя
SvenSoft
Сообщения: 111
Зарегистрирован: 2014.01.16, 18:51

Re: Какой командой Yii создать trigger mysql?

Сообщение SvenSoft »

Код: Выделить всё

public function up()
{  
     $sql = ".....";    
     $this->execute($sql);
}     

public function down()
{  
     $sql = "DROP TRIGGER IF EXISTS `after_update_client_rating`;"    
     $this->execute($sql);
}   
http://www.yiiframework.com/doc-2.0/yii ... e()-detail
prot
Сообщения: 34
Зарегистрирован: 2013.12.26, 21:02
Контактная информация:

Re: Какой командой Yii создать trigger mysql?

Сообщение prot »

Спасибо.
Перерыл документацию, а "слона" то и не заметил :)
В итоге вот так сработало:

Код: Выделить всё

$sql = '
    CREATE TRIGGER `after_update_client_rating` AFTER UPDATE ON `order`
    FOR EACH ROW
    BEGIN
        IF (NEW.rating is not null AND NEW.rating > 0 AND IFNULL(OLD.rating, 0) != NEW.rating) THEN
            UPDATE `user_profile` SET rating_up = IFNULL(rating_up, 0) + NEW.rating WHERE user_id = NEW.user_id;
        ELSEIF (NEW.rating is not null AND NEW.rating < 0 AND IFNULL(OLD.rating, 0) != NEW.rating) THEN
            UPDATE `user_profile` SET rating_down = IFNULL(rating_down, 0) + NEW.rating WHERE user_id = NEW.user_id;
        END IF;
    END; //
';
$this->execute($sql); 

Код: Выделить всё

$this->execute('DROP TRIGGER IF EXISTS `after_update_client_rating`');
На DELIMITER // ругался.
Закрыто