Symfony 4 @Gedmo \ SoftDeleteable () для формы с формой типа коллекции - PullRequest
7 голосов
/ 20 января 2020

У меня проблема с программным удалением элемента с коллекцией форм в Symfony framework

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

с изображением ниже, вы можете представить себе отношения

product relation generated with Mysql workbench

Это мои коллекции форм в Symfony формах

Main form
   +
   |
   ProductType+
   |          |
   |          |
   |          PackagesType+
   |                      |
   |                      |
   |                      PackageProductsType
   |
   |
   +

Пакетные продукты добавляются и удаляются с помощью JS во внешнем интерфейсе на основе Symfony примера для коллекций форм

Моя проблема заключается в полном удалении из package_product с активацией orphanRemoval = true в аннотации объекта все работает хорошо, но запись полностью удаляется, и я хочу, чтобы запись мягко удалялась на основе моего предложения, но когда я изменяю ниже функцию в Package Entity

    public function removePackageProduct(PackageProduct $packageProduct): self
    {
        if ($this->packageProducts->contains($packageProduct)) {
            $this->packageProducts->removeElement($packageProduct);
            // set the owning side to null (unless already changed)
            if ($packageProduct->getPackage() === $this) {
                $packageProduct->setPackage(null);
            }
        }
        return $this;
    }

всегда в верхней функции Я получаю последнюю запись в packageProducts, и когда я удаляю эту строку $packageProduct->setPackage(null);, чтобы отключить потерю данных в записи и заменить ее на $packageProduct->setDeletedAt(new \Datetime());, чтобы установить удаленный элемент , В сохраненных записях удаленная запись удаляется из базы данных и добавляется новая запись, заполненная данными последней записи и удаляемая по дате.

Например:

PackageProduct записей перед удалением первого элемента:

+----+------------+------------+--------+-----------+
| ID | Product_id | package_id | amount | deletedAt |
+----+------------+------------+--------+-----------+
|  1 |         10 |          1 |      3 |           |
|  2 |         11 |          1 |      4 |           |
|  3 |         12 |          1 |      5 |           |
+----+------------+------------+--------+-----------+

PackageProduct записей после удаления первого элемента:

+----+------------+------------+--------+-----------+
| ID | Product_id | package_id | amount | deletedAt |
+----+------------+------------+--------+-----------+
|  2 |         11 |          1 |      4 |           |
|  3 |         12 |          1 |      5 |           |
|  4 |         12 |          1 |      5 |2020-1-20..|
+----+------------+------------+--------+-----------+

Но я ожидал PackageProduct записей после удаления первого элемента:

+----+------------+------------+--------+-----------+
| ID | Product_id | package_id | amount | deletedAt |
+----+------------+------------+--------+-----------+
|  1 |         10 |          1 |      3 |2020-1-20..|
|  2 |         11 |          1 |      4 |           |
|  3 |         12 |          1 |      5 |           |
+----+------------+------------+--------+-----------+

Как это исправить получить ожидаемый результат?

...