Symfony 4 @Gedmo \ SoftDeleteable()用于具有集合类型形式的形式

问题描述 投票:5回答:1

我在Symfony框架中的表单集合的软删除项目有问题

我想添加和删除与Symfony表单集合相关的项目,如果我从集合中删除项目,则该项目必须从关系记录中被软删除

带有下面的图片,您可以想象关系

product relation generated with Mysql workbench

这是我在Symfony表单中的表单集合

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

基于Symfony example for form collections,在前端使用JS添加和删除包装产品

我的问题是,当我通过激活实体注释中的orphanRemoval = truepackage_product中完全删除时,一切正常,但记录已完全删除,我想根据我的建议删除记录,但是当我在下面更改时Package实体中的功能

    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());来设置已删除的项目时,在保存的记录中删除了从数据库中删除的记录并添加了一条新记录,其中填充了最后一条记录数据,并在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 |           |
+----+------------+------------+--------+-----------+

如何解决此问题以获得预期的结果?

php mysql symfony4 symfony-forms soft-delete
1个回答
0
投票
[可能是FOREIGN KEYs妨碍您的情况。

这里有许多提示:许多映射表:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

© www.soinside.com 2019 - 2024. All rights reserved.