Удалить CASCADE в поле, объявленном динамически

У меня есть конструктор

/**
 * User constructor.
 */
public function __construct()
{
    $this->projectUser = new ArrayCollection();
    $this->skills = new ArrayCollection();
    $this->goals = new ArrayCollection();
    $this->technicalReferentOf = new ArrayCollection();

    parent::__construct();
}

А переменная technicalReferentOf объявляется динамически.

Он связан с той таблицей, которая содержит только внешние ключи:

user_id |project_id |
--------|-----------|
46      |3          |
46      |13         |
69      |3          |

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

Как правильно решить эту проблему? заранее спасибо

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

Jovan Perovic 03.04.2018 15:47

Нет, только пользователь: / Вопрос информационный?

Von_Kavalier 03.04.2018 15:48

Хорошо, это немного проясняет ситуацию. Как я уже сказал, у вас должен быть CASCADE на вашем столе для объединения. Этот CASCADE применяется не к таблице project, а только к таблице соединения (то есть к паре ключей (user_id, project_id)). Пара ключей будет удалена, но проект останется нетронутым ...

Jovan Perovic 03.04.2018 15:50

Хорошо, я начинаю понимать. Но где это указать? Нужно ли мне добавить поле в мой класс User?

Von_Kavalier 03.04.2018 15:55

Нет, с вашими сущностями все должно быть в порядке. CASCADE необходимо указать в базе данных (когда вы определяете свои внешние ключи)

Jovan Perovic 03.04.2018 16:09

Хорошо спасибо ! Понятно !! Можете написать в ответ, а я поставлю галочку :)

Von_Kavalier 03.04.2018 16:18

Круто, у меня получилось;)

Jovan Perovic 03.04.2018 17:40
Стоит ли изучать 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 и хотите разрабатывать...
0
7
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо указать ограничение CASCADEON DELETE для вашей объединенной таблицы. Я бы посоветовал сделать это как для user_id, так и для project_id (назначенный проект можно удалить, верно?).

Не зная, какой поставщик БД использует, я не могу написать точный запрос для изменения вашей таблицы, но если вам нужна помощь с этим, пожалуйста, предоставьте обновление в своем вопросе ...

Надеюсь это поможет...

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