![](/img/trans.png)
[英]Symfony2 / Doctrine2 : how to access an entity annotation mapping?
[英]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(数据库级)
... 像这样
/**
* @ORM\OneToMany(targetEntity="Merchandise", inversedBy="verhicle", onDelete="CASCADE")
*/
现在,如果您移除车辆 - 将删除相关的商品实体。 添加的商品将自动保存。
...最后更新您的架构并删除 - >如果尚未更新约束并发生错误,请重新创建数据库。 确保双方都使用级联选项。
阅读文档章节“ 传递持久性/级联操作”中的更多内容 。
最后,当我尝试在DeleteController中删除它时,我解决了询问商品是否有车辆的问题。
如果商品推销有关联的车辆,我返回表单错误而不删除实体;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.