2011-04-05 1 views
0

내가 :(포함에 문제가 포함 설명해 보자CakePHP의이

모델의 관계 :

클라이언트 -> hasMany의 -> 카드 -> hasAndBelongsToMany의 -> 파트너 -> hasMany의 -> 연락처

내가 필요한 것은

는 codigo와 coords_lat와 = 24150과 연락처 = 38.71093을 클라이언트의 모든 파트너 및 연락처를 얻을 수 있습니다

코드 :.

$conditions = array('conditions' => 
    array('codigo' => '24150') 
); 

$contain = array(
    'contain'=> array(
    'Partner' => array(
     'Contact' => array('conditions' => array('coords_lat' => '38.71093')) 
    ) 
    ) 
); 

$parceiros = $this->Client->find('all', array($conditions, $contain)); 
내가

당신과 함께 완전히 솔직히 말해서, 난 정말 여기에서 무슨 일이 일어나고 있는지 이해가 안 app_model.php하는

var $actsAs = array('Containable'); 

을 추가 한

은 ... 진실은 MySQL의 거대한 쿼리 및 않는다는 것입니다 시간이 오래 걸리지 만 "codigo = 24150"으로 선택하는 것을 보지 못합니다.

도움이됩니다.

미리 감사드립니다.

루이

+0

지금 당신이 얻고있는 결과는 무엇입니까? '$ parceiros'의 내용은 무엇입니까? – vindia

+0

@ 레오의 대답을 확인해야한다고 생각합니다. 그것은 아마도 당신이 잘못되는 곳일 것입니다. 구문은 괜찮아 보입니다. CakePHP의 미친 쿼리를 생성하기 때문에 – vindia

+0

없음 출력 ..., 여기를 확인하지하시기 바랍니다 : http://pastebin.me/24d7e33ce334e56087dcb657080325ce , 그들은 포르투갈어 Cliente = Cliente, CgdCartoesCliente = 카드, cgd_cartoes_clientes의 테이블의 이름 죄송 임 = HATBM 연결 테이블 – Rui

답변

1

마지막으로 고정되어 있으므로 cakephp는 조건이 좋지 않고 다른 배열에 포함되어 있습니다. 이에 대한 해결책은 다음과 같습니다

$conditions = array(
    'conditions' => array('codigo' => '24150'), 
    'contain' => array(
     'Card'=>array(
      'Partner' => array (
       'Contact' => array(
        'conditions' => array('Contact.coords_lat' => '38.710930') 
       ) 
      ) 
     ) 
    ) 
); 

$parceiros = $this->Client->find('all', $conditions); 
1

고객이 파트너와 관련이 없다는 오류가 표시되어야합니다. 다음을 시도하십시오

$this->Client->contain(
    'Card'=>array('Partner' => array(
     'Contact' => array('conditions' => array('coords_lat' => '38.71093')) 
    ) 
    ) 
) 
); 

$parceiros = $this->Client->find('all', array('conditions' => 
              array('Client.codigo' => '24150') 
              ) 
           ) 
+0

행운을 빌어 요 .... 아직도 긴 쿼리와 mysql 시간 초과를 생성합니다. (또한 나는 그것을 codigo 24150으로 선택하는 것을 보지 못합니다. 여기에서 쿼리를 확인하십시오 : http://pastebin.me/24d7e33ce334e56087dcb657080325ce – Rui

+0

OK Rui가 약간의 제거 과정을 시도해 볼 수 있습니다. $ this-> Client-> contains 행을 주석 처리하십시오. $ parceiros의 내용을 pr()하면 무엇을 얻게됩니까? – Leo

+0

뭔가 이상합니다. $ conditions는 find에서 무시됩니다. :(재귀 적으로 = -1을 추가했고 생성 된 쿼리는 "select * f ROM 클라이언트 어디 1 = 1 "? : ( – Rui

2

당신은 또한 당신의 배열 $conditions 분리 $contain을 모두 유지할 수 ..

과로 마지막 줄을 변경 :

$parceiros = $this->Client->find('all', array_merge($conditions, $contain)); 

으로 통지 array_merge 기능 ..
이 두 가지에 대해 하나의 배열을 사용하지 않고도 문제를 해결해야합니다.