У меня есть конструктор
/**
* 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 |
Но когда я хочу удалить пользователя, у меня возникает ошибка внешнего ключа, которую я не могу решить каскадным удалением, поскольку поля нет.
Как правильно решить эту проблему? заранее спасибо
Нет, только пользователь: / Вопрос информационный?
Хорошо, это немного проясняет ситуацию. Как я уже сказал, у вас должен быть CASCADE на вашем столе для объединения. Этот CASCADE применяется не к таблице project, а только к таблице соединения (то есть к паре ключей (user_id, project_id)). Пара ключей будет удалена, но проект останется нетронутым ...
Хорошо, я начинаю понимать. Но где это указать? Нужно ли мне добавить поле в мой класс User?
Нет, с вашими сущностями все должно быть в порядке. CASCADE необходимо указать в базе данных (когда вы определяете свои внешние ключи)
Хорошо спасибо ! Понятно !! Можете написать в ответ, а я поставлю галочку :)
Круто, у меня получилось;)






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