2015-12-15 2 views
0

Я использую redbeanphp 4.3 и стараюсь понять, почему триггер mysql-db не запускается (или может быть проигнорирован).Does redbean php считают созданные mysql-триггеры?

Когда я работаю непосредственно в базе данных (с phpmyadmin) и вставляю строку в таблицу B, столбец в таблице A обновляется. Когда я правильно работаю с базой данных (через rest-api и, следовательно, с redbean php), строка также вставлена ​​в таблицу B, но столбец в таблице A не обновляется.

Это то же поведение, что и в моем приложении Android с сахаром.

Я тогда рассуждал, что использование ORM игнорирует использование триггеров. Но до сих пор я не утверждал, что какое-либо утверждение поддерживает мою диссертацию, а не на некоторых форумах, документацию по redbean и исходный код rd.php.

Объяснение или любая помощь будет оценена. Спасибо заранее.

Редактировать 1: Сценарий, использующий mysqli и pdo-драйвер, приводит к тому же поведению, что и ручная вставка (колонка обновляется). Поэтому PDO не может быть причиной.

Решение:

В таблице А и В имеют 1: N отношение.

Проблема была неправильным использованием метода R :: store() в redbean. Объект1 таблицы A был загружен, вставлен объект2 таблицы B (по R :: store()), триггер был выполнен, но объект1 таблицы A не распознал его. Конечный объект R :: store() на объекте 1 перезаписал обновления фона в исходное состояние.

Таким образом, решение довольно просто: удаление R :: store() на объектах таблицы B. Когда R :: store() вызывается в объекте 1 таблицы A, он сначала обновляет объект A и вставляет объект B впоследствии , который инициирует обновление объекта1.

+0

Возможно, это может быть проблема с PDO, поскольку это будет механизм, используемый ORM для взаимодействия с базой данных. – vascowhite

ответ

1

Попробуйте отладить SQL-запросы, созданные redBean, и проверьте, есть ли обновление столбца или что-то еще после вашей вставки.

  1. Настройка redBean для входа SQL querys:

    R :: отлаживать (TRUE, 3);

  2. Доступ и распечатать журнал:

    журналы

    $ = R :: getDatabaseAdapter() -> getDatabase() -> getLogger() -> getLogs(); print_r ($ logs);

Дополнительную информацию об отладке redBean вы найдете на официальном site.

+0

Спасибо, я смог решить проблему. –