AFAICS никто еще не разместил соответствующую часть документации :
Значения параметров по умолчанию оцениваются при выполнении определения функции. Это означает, что выражение оценивается один раз, когда функция определена, и что для каждого вызова используется одно и то же «предварительно вычисленное» значение. Это особенно важно для понимания, когда параметр по умолчанию является изменяемым объектом, таким как список или словарь: если функция изменяет объект (например, добавив элемент в список), значение по умолчанию изменяется. Обычно это не то, что было предназначено. Способ вокруг этого - использовать None как значение по умолчанию и явно проверить его в теле функции [...]
Я бы предложил создать новую таблицу с именем task_audit
, а затем присоединить триггеры (INSERT
, UPDATE
и DELETE
) к исходной таблице для обработки аудита, а не делать это через PHP. Эта статья хорошо объясняет триггеры.
Таблица task
будет содержать все «текущие» данные, а таблица task_audit
будет в основном копировать строки, когда происходят изменения, в идеале, вы также должны прикрепить столбец с именем audit_action
, чтобы вы могли дифференцировать между действием, которое произошло (INSERT
, UPDATE
или DELETE
). Вы бы прикрепили три триггера (для трех действий) к своей «основной» таблице, чтобы она записала измененные данные в таблицу аудита.
Используя этот метод, вы сможете легко перестроить задачу с любой даты, поскольку у вас есть все заархивированные данные, и ее также можно использовать для создания отчетов.