私は具体的になるでしょう。 私はエンティティクエスト、都市と主催者を持っています。クエストエラーと関係を持っている 私は主催者を削除しようと、実行中symfony(教義)のエンティティの関係についての相談
例外が発生した表示されます「= ID 主催。DELETE FROM?」
SQLSTATE [23000]:整合性制約違反:1451は、親行を削除するか 更新することはできません:paramsは[522]と外部キー制約が失敗(
test
Quest
、 CONSTRAINTFK_82D6D713876C4DDA
FOREIGN KEY(organizer_id
) REFERENCESOrganizer
(id
))
私は、関係を構成する正しい方法と絶対に混同しています。 論理は:
- 新しい都市を追加します。
- 新しい主催者を追加し、主催者に都合を入れます。
- 新しいクエストを作成し、それに都市や主催者を入れるよりも、
- オーガナイザーを削除した場合 - オーガナイザーのIDは でなければなりません(クエストは削除しないでください)。
- オーガナイザーを削除して、都市のオーガナイザーIDを削除する必要がある場合は、 も削除する必要があります(都市を削除しないでください)。
私の非常に愚かな記述には申し訳ありませんが、私は誤解を排除しようとしています。
私の状況では、右エンティティの関係は何ですか?
class Quest {
...
/**
* @ORM\JoinColumn(name="organizer_id", referencedColumnName="id")
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Organizer")
*/
protected $organizer;
}
class Organizer {
...
/**
* @ORM\Column(type="string", length=140)
*/
protected $name;
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\City", inversedBy="organizers")
* @ORM\JoinTable(name="organizers_cities")
*/
protected $cities;
public function __construct() {
$this->quests = new ArrayCollection(); // i don't remember why this is here
}
}
class City {
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Organizer", mappedBy="cities")
*/
protected $organizers;
/**
* Constructor
*/
public function __construct() {
$this->quests = new \Doctrine\Common\Collections\ArrayCollection();
$this->organizers = new \Doctrine\Common\Collections\ArrayCollection();
}
}
カスケードでクエストを削除したくない場合は、関係をnullにするだけです。コードが実行していることを確認してください。 – abdiel
ああ、okは理解していない。私は答えを書き換えた。ありがとう。 – Alsatian