Коллекция форм и доктрина Symfony удаляют всех дочерних элементов из коллекции (нежелательно)

У меня есть две сущности order и orderdetail. Они связаны отношением «один ко многим».

Order.php

/**
 * @ORM\OneToMany(targetEntity = "App\Entity\OrderDetail", mappedBy = "order", fetch = "EXTRA_LAZY", orphanRemoval=true, cascade = {"persist", "remove"})
 */
private $orderDetails;

OrderDetail.php

/**
 * The order this detail is in.
 *
 * @ORM\ManyToOne(targetEntity = "App\Entity\Order", inversedBy = "orderDetails")
 */
private $order;

Когда я редактирую заказ, я хочу иметь возможность удалить одну или несколько деталей и сохранить заказ. Детали не должны существовать сами по себе.

Что я сделал до сих пор

Я добавил orphanRemoval=true, чтобы убедиться, что деталь не может существовать сама по себе, и cascade = {"persist", "remove"}, чтобы можно было удалить деталь из заказа.

В моей форме для заказа OrderType.php я добавил встроенный for с опцией 'allow_delete' => true,

    ->add('orderDetails', CollectionType::class, array(
    'entry_type' => OrderDetailType::class,
    'entry_options' => array('label' => false),
    'allow_delete' => true,
    'required'     => false,
    'by_reference' => false,
))

Я добавил немного jQuery, чтобы можно было удалить orderDetail, но это не актуально, потому что без него у меня такая же проблема, а именно: всякий раз, когда я редактирую и сохраняю заказ, все детали заказа удаляются из этого заказа и удаляются из базы данных.

Странно то, что если я сбрасываю свой объект order в контроллер перед промывкой, все выглядит именно так, как должно. Проблема возникает в момент запуска $entityManager->flush();.

Изменения в моем контроллере не повлияли. Даже когда я удаляю почти весь код в своем контроллере, я удаляю jQuery, я редактирую заказ, ничего не касаясь, и сохраняю; все подробности удалены.

Можете ли вы сказать, что вызывает такое поведение и как это изменить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
190
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я понял, в чем проблема. У меня были поля формы в order detail, которые были отключены. Эти отключенные поля не были отправлены на сервер моим браузером. Это заставляет учение удалять этих детей. По этой проблеме было некоторое обсуждение здесь.

Чтобы все еще оставалось поле, которое нельзя изменить, но которое все еще отображается, я удалил атрибут disabled и добавил атрибут readonly => true в эти поля формы, и моя проблема решена.

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