Использование хуков для создания журнала базы данных - PullRequest
0 голосов
/ 06 марта 2012

Я должен регистрировать каждое действие базы данных в своей таблице журналов, вот таблица:

log_id - INT
user_id - INT
table - VARCHAR(45)
date - INT
action - ENUM('INSERT','DELETE','UPDATE')
new_value - VARCHAR(255)
old_value - VARCHAR(255)

Если пользователь создает новую запись в блоге, например, я должен сохранить идентификатор пользователя,таблица, в которую будет вставлен объект, дата, действие будет "INSERT", new_value будет сериализованным объектом php, old_value будет пустым.

В случае обновления мне нужно сохранить new_valueс новым объектом, но перед этим мне нужно сохранить текущие значения, также сериализованные в столбце old_value.

В случае удаления мне нужно сохранить сериализованный объект в столбце old_value и оставить new_valueempty.

Я читал о CI Hooks, но, похоже, он не работает с действиями с базой данных, только с контроллерами и системой.Есть ли способ использовать хуки или есть лучшее решение?

Заранее благодарен за любую помощь.

Извините за длинное описание, я не очень хорошо разбираюсь в словах.

1 Ответ

2 голосов
/ 07 марта 2012

1

Вы можете расширить класс драйвера БД, чтобы перехватывать все запросы к БД. Вы можете получить суперобъект CI, чтобы получить информацию о пользователе. Затем вы можете изменить класс для выполнения обычной работы с БД, а также сохранить запросы / все остальное в БД.

codeigniter - пирокмы перехватывают и изменяют все запросы; расширение активной записи

http://codeigniter.com/wiki/Extending_Database_Drivers

Плюсы:

- базовая операция; происходит прозрачно - никаких модификаций не требуется для существующих конструкторов

2

Другой вариант (меньше работы впереди, больше работы впереди) - создать библиотеку и украсть кучу кода класса profiler [system / library / Profiler.php] и вызвать библиотеку в ваши конструкторы контроллера. В библиотеке вы можете изменить украденный код профилировщика, чтобы получать запросы и другие данные и сохранять их в БД (также суперобъект CI для пользовательских данных).

Плюсы:
-Может при желании отправлять другие данные из контроллеров (например, может отправлять параметры в метод библиотеки при вызове в конструкторе контроллеров)

Минусы:
-Измените эти конструкторы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...