を削除しますので、私は次のエラーを取得する私は、この構成を持っているDoctrineのエンティティで多対多Doctrine2関係
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\ManyToMany(targetEntity="PriceRate", cascade={"all"}, orphanRemoval=true)
* @ORM\JoinTable(name="product_rates",
* joinColumns={@ORM\JoinColumn(name="product_id",referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="rate_id",referencedColumnName="id")})
*/
protected $rates;
私はそれが最初price_rate
テーブルを削除しようとするエンティティを削除すると、代わりに結合されたテーブルの:
Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (
uniski
.product_rates
, CONSTRAINTFK_15A90A8FBC999F9F
FOREIGN KEY (rate_id
) REFERENCESprice_rate
(id
))
最初に結合テーブルの行を削除しようとしないのはなぜですか?私はonDelete
ステートメントを結合テーブルの列に追加しようとしましたが、動作しませんでした。
PriceRateが他のエンティティによって使用されているため、これは単方向関係です。したがって、ManyToMany関係を使用しています。
それが動作する唯一の方法は、エンティティを削除する前にあるので、のような子実体のあるArrayCollectionをクリアすることです:
$product->removeAllRate(); //it does this: $this->rates->clear();
$em->remove($product);
$em->flush();
ありがとう!
この記事は私に助け:https://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451。よろしくご連絡ください – Albeis