제약 조건 위반으로 인해 데이터베이스에서 항목을 삭제하려고 할 때 오류가 발생하는 모델이 있습니다.Doctrine, Typo3 흐름 : 삭제 작업을 수행 할 수 없습니다.
오류 메시지는 다음 실행 동안
예외가 발생 'WHERE ID = pits_docmanager_domain_model_role에서 삭제? 외부 키 제약 조건이 실패했습니다 ('flow_db_pits_doc_manager`.pits_docmanager_domain_model_role_role_accesspoints_join`, 제약 조건'FK_54B164455C544054`) FOREIGN KEY (`docmanager_role`) : 부모 키를 삭제하거나 갱신 할 수 없습니다. 참조`pits_docmanager_domain_model`)
#의 23000 : SQLSTATE [23000] : 무결성 제약 조건 위반 : 1451 삭제하거나 부모 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패 (`flow_db_pits_doc_manager`.`pits_docmanager_domain_model_role_role_accesspoints_join`, CONSTRAINT`FK_54B164455C544054` FOREIGN KEY (`docmanager_role`) 참조
pits_docmanager_domain_model\
)
그리고 내 엔티티에 내가 가지고 (role.php)
/**
* @var \Doctrine\Common\Collections\Collection<\Pits\DocManager\Domain\Model\AccessPoint> $role_accessPoints
* @ORM\ManyToMany(targetEntity="\Pits\DocManager\Domain\Model\AccessPoint",cascade={"remove"})
* @ORM\JoinTable(name="role_accesspoints",
* joinColumns={@ORM\JoinColumn(name="access_point_id",referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id",referencedColumnName="id")})
*/
protected $role_accessPoints;
다른 파일에 (accesspoints.php)
/**
* @var \Doctrine\Common\Collections\Collection<\Pits\DocManager\Domain\Model\Role> $accessPoint_roles
* @ORM\ManyToMany(targetEntity="\Pits\DocManager\Domain\Model\Role",cascade={"all"})
*/
protected $accessPoint_roles;
난 여전히 부동산 오전에 할 수없는 설정 cascade 옵션이 있어도 그래도 해당 항목을 제거합니다.
편집 : 내가 뭘 달성하려고하는 즉 ..
내가 2 개 모델 (역할과 accesspoints)가 고려하십시오. 내가 역할을 삭제하면 해당 역할과 연결된 테이블에 관련된 데이터를 삭제할 수 있어야합니다 (액세스 포인트에 데이터를 보존하려는 경우)
편집 2 : 모든 옵션을 제거했습니다.
/**
* @var \Doctrine\Common\Collections\Collection<\Pits\DocManager\Domain\Model\AccessPoint> $role_accessPoints
* @ORM\ManyToMany(targetEntity="\Pits\DocManager\Domain\Model\AccessPoint",cascade={})
* @ORM\JoinTable(name="role_accesspoints",
* joinColumns={@ORM\JoinColumn(name="access_point_id",referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id",referencedColumnName="id")})
*/
protected $role_accessPoints;