문제

사용자, 지역, 국가의 3 가지 모델이 있다고 가정 해 봅시다.

User belongsTo Region
Region belongsTo Country

이러한 모델 각각은 포함 가능한 동작을 사용하고 있습니다. 코드 'US'로 국가에서 사용자를 찾으려고 노력하고 있습니다. 내가 시도하는 것은 다음과 같습니다.

$users = $this->User->find('all', array(
    'conditions' => array('Country.code' => 'US'),
    'contain'    => array('Region.Country'),
));

CakePHP는 이것을 2 개의 쿼리로 분리합니다.

  1. 첫째, 코드 'US'가있는 모든 국가의 ID를 선택하고 있습니다.
  2. 그런 다음 해당 ID를 사용하여 모든 사용자가 참여하는 지역에 가입하는 모든 사용자를 선택합니다. region.country_id 이전에 검색된 국가 ID 목록에 있습니다.

결과적으로, 나는 내 앱에서 SQL 오류로 끝납니다. conditions 배열에는 Country.code에 대한 참조가 포함되어 있으며 케이크 건설이 제작 한 두 번째 쿼리는 국가에 가입하지 않습니다.

내가 보는 가장 좋은 케이크 솔루션은 복잡한 찾기 조건 매뉴얼의 일부. 그러나 이것은 매우 복잡한 것처럼 보이며, 내가 구현하고 싶은 것보다 더 많은 해킹입니다. 내가 간과하는 쉬운 방법이 있습니까?

도움이 되었습니까?

해결책

Nate Abele (Cakephp의 이전 리드 데브)은 행동에 관한 기사를 썼습니다. 임시 조인 도움이 될 수 있습니다.

다른 팁

뒷면에 조건을 넣으십시오. 예 :

$users = $this->User->find('all', array('contain' => array(
    'Region' => array(
        'Country' => array(
            'conditions' => array('Country.code' => 'US'),
        ),
    ),
)));

두 번째로 나오는 예를 참조하십시오 포함 가능한 매뉴얼

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top