Doctrine - Сохранение ассоциаций после удаления родительской сущности

У меня есть два объекта с отношением "один ко многим" - пользователь и журнал.

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 21.03.2019 23:46

@ArtisticPhoenix Вы имеете в виду добавление столбца delete_at для пользователя? Если подумать, это решает мою проблему, но по-прежнему держит таблицу журналов заполненной ненужными журналами. Я планирую сохранить эти журналы как потенциальный вариант восстановления в редких случаях.

Viktor 22.03.2019 00:17

почему бы не периодически создавать резервные копии данных, я делаю это 1 раз в день на этой неделе, 1 раз в неделю в этом месяце и 1 раз в месяц после этого и т. д. Идея заключается в том, что чем дольше это было, тем меньше требуется детализации. Не уверен, что вы имеете в виду нечто подобное.

ArtisticPhoenix 22.03.2019 01:59

Мягкое удаление звучит как то, что вам нужно. Простая реализация уже доступно. Вы действительно будете вести избыточные записи. Тем не менее, вы можете добавить опцию «жесткого удаления» или автоматическую процедуру после периода X, чтобы иметь возможность безвозвратно удалить все (как записи пользователя, так и записи журнала).

rkeet 22.03.2019 14:46

Я решил пойти с опцией мягкого удаления. Я рассматривал возможность использования доктрины Event, но решил пойти по более простому методу. Я все равно их удалю, если они устареют.

Viktor 23.03.2019 00:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
22
0

Другие вопросы по теме