繁体   English   中英

symfony2:如何使用doctrine / restrict注释删除相关实体?

[英]symfony2: How to remove related entity with doctrine / restrict annotation?

我对实体中的删除约束有些麻烦。

我有实体商品和实体车辆,商品中有多对一关系,因此商品只能在一辆车上,而车辆可能有很多商品。 所以我有:

class Merchandise{
   /**
    * @ORM\ManyToOne(targetEntity="Vehicle",inversedBy="merchandise")
    * @ORM\JoinColumn(name="vehicle", referencedColumnName="id")
    */
    private $vehicle;
}

class Vehicle{
   /**
    * @ORM\OneToMany(targetEntity="Merchandise",mappedBy="vehicle")
    */
    private $merchandise;
}

我想得到的是,当我尝试删除有车辆的商品时,商品无法删除。 但我不知道如何设置ORM Level限制约束。 我试过restrict = {“remove”}但它在@ORM \\ OneToMany中不存在。 我也尝试将preRemove函数返回false,但它不起作用:(

任何想法?

谢谢!!!

ManyToOne / inversedBy是从学说的角度看双向关系的OWNING方面 - 这可能导致混淆。

要解决您的问题,请向商品实体添加级联操作。 例:

/**
 * @ORM\ManyToOne(targetEntity="Vehicle",mappedBy="merchandise", cascade="{all}")
 */

级联可以设置为以下组合:

  • 坚持
  • 去掉
  • 合并
  • 分离
  • 所有

通过向您的Vehicle实体添加级联(ORM级别)进一步改进。 例:

/**
 * @ORM\OneToMany(targetEntity="Merchandise", mappedBy="verhicle", cascade="{persist,remove}")
 */

...或者使用onDelete(数据库级)

  • SET NULL
  • 级联

... 像这样

/**
 * @ORM\OneToMany(targetEntity="Merchandise", inversedBy="verhicle", onDelete="CASCADE")
 */

现在,如果您移除车辆 - 将删除相关的商品实体。 添加的商品将自动保存。

...最后更新您的架构并删除 - >如果尚未更新约束并发生错误,请重新创建数据库。 确保双方都使用级联选项。

阅读文档章节“ 传递持久性/级联操作”中的更多内容

最后,当我尝试在DeleteController中删除它时,我解决了询问商品是否有车辆的问题。

如果商品推销有关联的车辆,我返回表单错误而不删除实体;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM