У меня есть два объекта с отношением "один ко многим" - пользователь и журнал.
class User {
/** @OneToMany(targetEntity = "Log", mappedBy = "user") */
private $logs;
}
class Log {
/**
* @ManyToOne(targetEntity = "User", inversedBy = "logs")
* @JoinColumn(name = "user_id", referencedColumnName = "id")
*/
private $user;
}
Чего я хочу добиться, так это следующего: после того, как я удалю объект User, вместо каскадного удаления всех этих User журналов, я хочу иметь возможность сохранять эти журналы и по-прежнему иметь возможность сохранить этот user_id. Я думал о создании новой таблицы базы данных old_logs с той же структурой, что и таблица logs, куда будут скопированы все данные из объекта User перед удалением объекта User, так как я считаю, что не могу оставить user_id указывающим на не- существующий пользователь (с использованием внешних ключей).
Возможно ли что-то подобное через класс доктрины Entity?
@ArtisticPhoenix Вы имеете в виду добавление столбца delete_at для пользователя? Если подумать, это решает мою проблему, но по-прежнему держит таблицу журналов заполненной ненужными журналами. Я планирую сохранить эти журналы как потенциальный вариант восстановления в редких случаях.
почему бы не периодически создавать резервные копии данных, я делаю это 1 раз в день на этой неделе, 1 раз в неделю в этом месяце и 1 раз в месяц после этого и т. д. Идея заключается в том, что чем дольше это было, тем меньше требуется детализации. Не уверен, что вы имеете в виду нечто подобное.
Мягкое удаление звучит как то, что вам нужно. Простая реализация уже доступно. Вы действительно будете вести избыточные записи. Тем не менее, вы можете добавить опцию «жесткого удаления» или автоматическую процедуру после периода X, чтобы иметь возможность безвозвратно удалить все (как записи пользователя, так и записи журнала).
Я решил пойти с опцией мягкого удаления. Я рассматривал возможность использования доктрины Event, но решил пойти по более простому методу. Я все равно их удалю, если они устареют.






Не было бы проще/лучше сделать мягкое удаление.