Как добавить MySQL Trigger через PHP Form (Prestashop 1.5.4: установочный модуль)

Я должен сделать модуль, который динамически меняет блок короткого описания. Но этот блок не существовал в Prestashop 1.5.4, если краткое описание пусто, поэтому я подумал сделать триггер, чтобы заполнить его, если он пуст.

Вот моя функция установки:

public function install()
{
if
(
!parent::install()
OR !$this->registerHook('displayProductStatus')
OR !$this->registerHook('displayOverrideTemplate')
) {
return FALSE;
}$sql = array();
include(dirname(__FILE__) . '/init/install_sql.php');
foreach ($sql as $s)
{
if (!Db::getInstance()->Execute($s))
{
return FALSE;
}
}
return TRUE;
}

А вот и мой install_sql.php

<?php

$sql = array();

$sql[] = "DELIMITER $$

CREATE TRIGGER add_short_description
BEFORE INSERT ON ps_product_lang
for each row begin
if (NEW.description_short is NULL OR NEW.description_short = '' ) THEN
SET NEW.description_short = '.';
END IF;
END$$

DELIMITER ;";

Эта триггерная функция довольно хорошо работает, если я добавляю ее непосредственно в PHPMyAdmin, но установка завершается неудачно, когда я прохожу мимо установки модуля.
Я думаю, что это ошибка разделителя, но … я не знаю, как этого избежать.

Что я должен изменить?

(и извините за мой плохой английский, я надеюсь, что это по крайней мере понятно)

0

Решение

1) DELIMITER является только клиентской командой mysql и не является частью SQL. Поэтому вы не должны включать это.

2) Теперь вы можете превратить свой курок в «однострочник»

CREATE TRIGGER add_short_description
BEFORE INSERT ON ps_product_lang
FOR EACH ROW
SET NEW.description_short = COALESCE(NULLIF(NEW.description_short, ''), '.')

Вот SQLFiddle демонстрация

3) У меня недостаточно знаний о Prestashop, но добавление триггера в составе модуля может быть очень плохой идея, потому что это может легко ввести побочные эффекты, особенно если ps_product_lang является частью общей схемы.
Я лично был бы очень разозлился, если какой-нибудь сторонний модуль начал создавать триггеры в моей базе данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]