2016-12-21 5 views
0

カスケードORM側で削除できないのはなぜですか?

$em->remove($news); 

を呼び出して、私は、制約違反エラーを得ました。

私は2つのエンティティ、ニュースと画像を持っています。私はこのように、ニュースへの参照のみを持っているImageインサイド

/** 
    * @ORM\OneToOne(targetEntity="Image", orphanRemoval=true, cascade={"persist"}) 
    */ 
    private $cover; 

    /** 
    * @ORM\OneToOne(targetEntity="Image", orphanRemoval=true, cascade={"persist"}) 
    */ 
    private $img; 

    /** 
    * @ORM\OneToMany(targetEntity="Image", mappedBy="news", orphanRemoval=true, cascade={"persist", "remove"}) 
    */ 
    private $gallery; 

/** 
    * @var News 
    * 
    * @ORM\ManyToOne(targetEntity="News", inversedBy="gallery", cascade={"remove"}) 
    */ 
    private $news; 

私はconstraitを持っていることを知っているNews

私はこのようなImageから3つの参照を、持っていますそこに走っているが、カスケードしないでください= {"削除"} ORMの側にこの理由がありますか?

私はここで何が欠けていますか?もし私が追加すれば、多くのToOne関係に

* @ORM\JoinColumn(onDelete="CASCADE") 

のようになります。私はそれがORM側にあることが可能であるかどうかを知りたいと思います。

答えて

0

cascade={"remove"}$galleryのようにNews側に設定されています。

/** 
    * @ORM\OneToMany(targetEntity="Image", mappedBy="news", orphanRemoval=true, cascade={"persist", "remove"}) 
    */ 
    private $gallery; 

他の関連付けについても同じ操作を行います。

/** 
    * @ORM\OneToOne(targetEntity="Image", orphanRemoval=true, cascade={"persist", "remove"}) 
    */ 
    private $cover; 

    /** 
    * @ORM\OneToOne(targetEntity="Image", orphanRemoval=true, cascade={"persist", "remove"}) 
    */ 
    private $img; 

    /** 
    * @ORM\OneToMany(targetEntity="Image", mappedBy="news", orphanRemoval=true, cascade={"persist", "remove"}) 
    */ 
    private $gallery; 
+0

ご回答ありがとうございます。残念ながら、これは私が試したワンショットでした。今すぐ確認したところ、再試行しました.OnCascadeでJoinColumnを削除し、カスケード削除を他のエンティティに適用すると、制約違反が残ります – Leggy7

+0

{bin/app}/consoleでデータベースを更新してもよろしいですか? doctrine:schema:update --force?私は嘘をついていませんが、私は年齢の間エンティティの関係を論じています。実行することを覚えています。 – JezEmery

+0

@JezEmeryはい、サー。私はこのasnwerに応じて変更を行ってDBを更新し、もう一度試しました。残念ながら結果は同じです。制約が稼動している間は親エンティティを削除したくありません。私は画像を削除することができる前に、リスナーを使用してヌルに関係を設定しました。しかし、それは絶対的なものではない – Leggy7

関連する問題