내 응용 프로그램에는 관련 테이블에서 허용되는 값 목록을 제공하는 데 사용되는 여러 가지 간단한 참조/조회 데이터베이스 테이블이 있습니다.Doctrine에서 참조 테이블/조인 테이블 조인 방지 2
(당신은 ...는 '국가'표는 주소 테이블의 '국가'필드에 허용되는 국가의 목록을 가지고, 알고)
가능한 한 린 내 데이터 모델을 유지하기 위해, I 조회 테이블의 'id'열을 건너 뛰고 실제 값을 기본 키로 사용하는 "Bill Karwin technique"을 사용하십시오. 그런 식으로 외부 테이블처럼 이미 존재하기 때문에 메인 테이블의 값을 얻기 위해 조인 할 필요가 없습니다.
문제는 Doctrine은 모든 연결에 대해 개체 참조를 사용하기 때문에 주 테이블에 이미 필요한 값이있는 경우에도 조회에 여전히 조인이 필요하다는 의미입니다.
예를 들어,이 쿼리가 작동하지 않습니다
$qb->select(array('a.id', 'a.street', 'a.city', 'a.country'))
->from('Entity\Address', 'a');
을 대신,이 작업을 수행해야합니다 :
$qb->select(array('a.id', 'a.street', 'a.city', 'c.country'))
->from('Entity\Address', 'a')
->join('a.country', 'c');
그렇지 않으면이 오류 얻을 :. "잘못된 PathExpression을 StateFieldPathExpression이어야합니다 . "
조회 테이블에 필요한 모든 조인을 추가하면 쿼리에 불필요한 비용이 많이 듭니다.
누가 Doctrine 2에서 조회/참조 테이블 조인을 수행하지 않아도되는 좋은 방법을 알고 있습니까?
(PS -. 그들은 not supported by Doctrine있어 다른 well-documented disadvantages을 가지고있는 나는, 열거 형을 사용하지 않으려는)
가
위대한입니다 - 나는 setHint() 메서드에 대해 잘 알지 못했고 잘 사용하도록 계획했습니다. – cantera
Set 힌트는 메타 열을 포함하는 것뿐만 아니라 모든 종류의 물건에 사용됩니다. 모든 쿼리와 함께 실행되는 쿼리 워커를 첨부하는 방법입니다. 당신은 또한 당신이 원하는 무엇이든하는 당신 자신의 힌트를 만들 수 있습니다. 좋은 작은 일이 아니다;) – ZolaKt
경고 : Doctrine은 null을 보유하는 외래 키를 포함하지 않는다. 도시 ID가 의무적이지 않은 것처럼 항상 존재하지는 않습니다. 그냥 캐시 문제라고 생각하면서 2 시간을 보냈습니다 :) –