2016-10-19 27 views
0

リンクテーブルを使用して2つのエンティティ間に多対多の関係があります。私の問題は、削除時に、削除すべきではない他のエンティティが、リンクテーブルの行ではなく、削除しようとしているように見えることです。Doctrine - ManyToMany関係が正しく削除されない

私は、次の表があります、私もhotel_property_amenityを削除する必要がありますプロパティを削除しようとしているが、私のログが表示されているので、

CREATE TABLE `hotel_property_amenity` (
`property_id` int(11) NOT NULL, 
`amenity_id` int(11) NOT NULL, 
PRIMARY KEY (`property_id`,`amenity_id`), 
KEY `IDX_197E8A3E549213EC` (`property_id`), 
KEY `IDX_197E8A3E9F9F1305` (`amenity_id`), 
CONSTRAINT `FK_197E8A3E9F9F1305` FOREIGN KEY (`amenity_id`) REFERENCES `hotel_amenity` (`id`), 
CONSTRAINT `FK_197E8A3E549213EC` FOREIGN KEY (`property_id`) REFERENCES `hotel_property` (`id`) 
) 

CREATE TABLE `hotel_property` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`location_id` int(11) DEFAULT NULL, 
`tier_id` int(11) DEFAULT NULL, 
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
`description` longtext COLLATE utf8_unicode_ci, 
PRIMARY KEY (`id`) 
) 

CREATE TABLE `hotel_amenity` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`value_str` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
`is_active` tinyint(1) NOT NULL, 
PRIMARY KEY (`id`), 
) 

とリンクテーブルをhotel_amenityが削除されています(または試行していますが、明らかに制約違反をスローします)

ログ:

500 An exception occurred while executing 'DELETE FROM hotel_amenity WHERE id = ?' with params [67] 

。 。

Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`hotel_property_amenity`, CONSTRAINT `FK_197E8A3E9F9F1305` FOREIGN KEY (`amenity_id`) REFERENCES `hotel_amenity` (`id`)) 

教義プロパティエンティティ(私は私が間違っているかもしれないと思う場合):

/** 
* @var ArrayCollection 
* 
* @ORM\ManyToMany(
*  targetEntity="Test\Hotel\Entity\Amenity", 
*  indexBy="type", 
*  orphanRemoval=true, 
*  fetch="EXTRA_LAZY", 
*  cascade={"persist", "refresh", "remove"}) 
* @ORM\JoinTable(name="hotel_property_amenity", 
*  joinColumns={@ORM\JoinColumn(name="property_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="amenity_id", referencedColumnName="id")}) 
* 
* @ORM\OrderBy({"featured" = "DESC", "sortPosition" = "ASC"}) 
*/ 
protected $amenities; 

誰も私が間違って行ってきた任意のアイデアを持っていますか?

答えて

0

問題が終了したのは、カスケード=「削除」です。それが削除されると、ブリッジテーブルの行が処理され、関連するエンティティはそのまま残されます。

関連する問題