Вадим
ну верно, 2 запроса сгенерит ORM, чтобы удалить сперва b потом a
это такой программный onDelete CASCADE
Viktor
Михаил
Михаил
я говорю про то что важно ли в каком порядке доктрина удаляет сирот
Михаил
по идее сначала она должна грохнуть сирот а потом родителя
Михаил
если делает наоборот но ясен красен будет ошибка
Вадим
пиздец как сложно-то, зачем так сложно.. :(
Михаил
Вадим
3й день я думаю как блин удалить сущность, обо мне уже плохо думают
Вадим
Юра
Вообще это всегда путает и каждый раз нужно думать как это работает
Вадим
а с морозу вообще тяжеловато
Вадим
Вадим
Вадим
вот бы ещё кто-нибудь рассказал что произойдёт если указать и то и другое
Вадим
foreach ($task->getAttachments() as $attachment) {
$task->removeAttachment($attachment);
}
$this->taskRepository->remove($task);
$this->entityManager->flush();
у свойства attachments указано cascade: ['persist', 'remove']
SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column \"task_id\" of relation \"attachment\" violates not-null constraint\nDETAIL: Failing row contains (4, null, 30, 1, 2024-07-02 09:57:41).",
Вадим
Юра
Вадим
Вадим
у меня оно везде так
Юра
Ну покажи код removeAttachment
Вадим
public function removeAttachment(Attachment $attachment): static
{
if ($this->attachments->removeElement($attachment)) {
// set the owning side to null (unless altask:ready changed)
if ($attachment->getTask() === $this) {
$attachment->setTask(null);
}
}
return $this;
}
Юра
Ну вот
Юра
Ты ставишь таск в нул, удаляешь таск
Юра
А что должно остаться у аттачмента
Юра
Если оно nullable false
Вадим
так аттачмент же орфан, а как же магия orphanRemoval: true
Вадим
я ж хочу чобы оно удалилось
Вадим
как ООП и всё такое
Юра
Убери вообще этот орфан. Он редко когда нужен
Юра
Поставь cascade: delete
Вадим
та бля :)
Юра
Если тебе нужно удалять все аттачменты
Вадим
Юра
Ты удяляешь таску, база удаляет таску и все аттачменты
Юра
Юра
Проверь что оно указано в правильном месте
Вадим
Юра
Cascade delete должен в базе у ФК навесить ON DELETE CASCADE никакой магии
Вадим
Юра
Вадим
не хотел так
Вадим
хотел чтобы события ORM остались
Вадим
оно ж там втихую, вжик
Вадим
а мне протоколировать всё надо
Вадим
кто что когда
Юра
Ну значит поставь нулабл тру
Юра
И проверь удаляет или нет
Вадим
пиздец ну что за жизнь в доктрине целых 2 способа удаления и ни один не работает
Вадим
мы строили строили и наконец построили
Кирилл
получилось?
Вадим
Вадим
а может там есть где-то включалка этой магии?
Вадим
може она у меня выключеная
Nikolay
Вадим
но надо то
Юра
У тебя ещё есть какая-то энтити TaskPlan видимо
Юра
Которая ссылается без on delete cascade на task
Вадим
Вадим
private function remove(Task $task): void
{
foreach ($task->getChildren() as $child) {
$this->taskRepository->remove($child);
}
foreach ($task->getComments() as $comment) {
$this->commentRepository->remove($comment);
}
foreach ($task->getLogEntries() as $logEntry) {
$this->logEntryRepository->remove($logEntry);
}
foreach ($task->getAttachments() as $attachment) {
$this->mediaObjectRepository->remove($attachment->getMediaObject());
$this->attachmentRepository->remove($attachment);
}
foreach ($task->getFieldValues() as $fieldValue) {
$this->fieldValueRepository->remove($fieldValue);
}
$this->taskPlanRepository->remove($task->getTaskPlan());
$this->taskRepository->remove($task);
$this->entityManager->flush();
}
Вадим
вот, так работает
Вадим
говно ваше ооп, говно ваша доктрина
Вадим
понахуячили сложноты в которой разбираются 5 человек на планете
Doctor
Как говорится, много букв и не читал, но вот такое не смогло бы спасти ситуацию?
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
Вадим
Вадим
а, или нет, это ж не про нулабл фалс
Doctor
Как раз при NOT NULL могло бы помочь
Doctor
Вадим