2017-05-15 4 views
0

특정 엔티티, 예를 들어 삭제 대상이되는 관계를 찾는 방법을 찾으려고합니다.엔티티에 관계가 있는지 확인 - 방법?

예 설정 :

  • Country 엔티티가 Currencies 많은 수 있습니다.
  • Currency 엔티티는 Countries 일 수 있습니다.
  • Country은 기본 값이 Currency 일 수 있습니다.

그러므로 설정은 Country <-> (1-n) <-> CountryCurrency <-> (n-1) <-> Currency입니다.

위의 예에서 삭제 대상 국가에 연결된 통화가 있으면 쉽게 찾을 수 있습니다.

그러나 위의 내용은 전역 적으로 설정되었으며 응용 프로그램 내의 다른 모듈에서 사용할 수 있다고 가정 해보십시오. 는 어떻게 특정 Country 엔티티하려고하므로받지 않고 삭제 될 수 있음을 파악할 수있다 : 다른 모듈이 Address 예를 들면, (AN AddressCountry을 하나 가짐) 단방향 관계에서 국가를 사용한 경우

a Foreign Key constraint 오류?

Doctrine에는이 기능이 내장되어 있지만 문서에서 찾을 수 없었기를 바랍니다. 성공하지 못한 채 Google을 잠시 동안 사용해 왔습니다. 항상 동향 : "글쎄, 너 $entity->getSomeRelation()->count() > 0 그리고 너도 알지."하지만 모든 엔티티에 적용 할 수있는 일반적인 솔루션/방법을 찾고 있습니다.

+1

"php doctrine metadata"로 검색하십시오. 메타 데이터는 모든 관계를 설명합니다. 나는 당신의 접근이 실제로 실제로 어떻게 작동 할 것인가에 대해 회의적이지만 정보는 거기에 있습니다. – Cerad

+0

재미있는 정보, 잊어 버렸습니다. 그러나, 그것은 나의 유스 케이스에 대한 잘못된 방법이다. 내 질문에 그것을 케이스에 적용 할 때, 나는 모든 정보가 내가 삭제하고있는'국가'로부터 왔음을 알 수있다. 단방향으로 '국가'를 사용하는 '주소'와 관련된 결과가 없습니다. ('associationMappings' 속성의'ClassMetadata' 엔티티에서 볼 수 있듯이 -> 'Country # coordinates'와'Country # countryCurrencies'에 대한 링크를 포함합니다). 다른 생각이라면, 나는 올바른 방향으로 포인터에 귀를 기울입니다. – Nukeface

+0

Doctrine Database Abstraction Layer 스키마 도구를 사용하여 SQL 데이터베이스에 직접 외래 키 제약 조건이 있는지 확인할 수 있습니다. http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/schema-manager.html 그러나 나는 여전히 당신의 전체 접근에 대해 모호하다. 정말로 이런 종류의 문제에 부딪 힐 것이라고 생각하십니까?설정 변수를 설정하는 것은 어떨까요? – Cerad

답변

1

항상 비즈니스 모델에 따라 다르므로 일반적인 해결책은 없습니다. 관계와

삭제 엔티티는 다른 시나리오로 이어질 수 :

  • 뿐만 아니라
  • 관련 엔티티를 삭제
  • 를 널 (null) 또는 모두 삭제 허용하지 관계를 설정.

귀하의 경우에 따라 수동으로 수표를 발행해야합니다.

+0

아,하지만 그게 문제 야. 전 세계적으로 일할 수있는 무언가를 만들고자합니다. '$ entity-> isUsedByForeignKeys()'또는'$ entity-> canBeDeleted()'또는'$ entity-> hasAssociationsPointedAtIt()'의 줄에있는 것입니다. 내가 질문하는 방식으로 당신이'Address'에 의해 사용 된'Country'를 삭제하려고 시도 할 때 MySQL이하는 방식을 체크하는 방식으로 쓰여졌을 가능성이 있기 때문에 세계적으로 잘 작동합니다. 후자의. 그 방향으로 어떤 포인터가 있다면, 나는 모든 귀입니다. – Nukeface

+0

나는 너를 이해하지만, 나는 그것이 좋은 방향이 아닌가 걱정된다. :) 정말로 구현하고자한다면 doctrine 메타 데이터로 시작하는 것이 좋습니다. 정의 된 모든 연관에 대한 정보를 검색 할 수 있습니다. 이 데이터가 있으면 각 엔티티를 확인할 필요가있는 엔티티 목록을 작성할 수 있습니다. (목록을 작성하는 것은 간단한 작업이 아니므로 캐시해야하며 모델이 변경되면 캐시가 업데이트되었는지 확인해야합니다.) 그런 다음이를 확인하는 함수를 작성하십시오. 복합 키, 계단식 조작 및 성능 문제가 발생할 수 있습니다. 행운을 빕니다. – kormik

관련 문제