2013-06-07 2 views
1

ModelAModelB이 CakePHP 애플리케이션에 있다고 가정 해 봅니다.관련 모델의 필드 값이 비어 있지 않은 경우에만 쿼리 결과를 반환합니다. cakephp

ModelA hasOne ModelB 
ModelB belongsTo ModelB 

내가 ModelBnumber 필드가 비어 있지 않은 경우에만 뭔가를 반환해야 ModelA의 발견() 쿼리를 원하는 (그렇지 않으면 빈 반환) : ModelAModelB 사이의 관계의 유형은 다음과 같다. 나는 이런 식으로 뭔가를 시도했지만 내 MODELA 및 ModelB은 여전히 ​​ModelB의 number 필드가 비어있는 경우에도 쿼리의 결과로 반환됩니다 위에서 볼 수 있듯이, 나는에 contain의 조건을 넣어

$this->ModelA->find('first', array(
    'contain' => array(
     'Model B' => array(
      'conditions' => array(
       'ModelB.number IS NOT NULL' 
      ) 
     ) 
    ), 
    'conditions' => array(
     'ModelA.id' => 13 
    ) 
)); 

ModelB. 제가 여기서하려고하는 것이 충분히 분명하기를 바랍니다. 아무도 도와 줄 수 있니?

감사합니다.

+0

'ModelB.number IS NOT NULL'에서 'array ("NOT"=> array ("ModelB.number"=> null))'로 조건을 변경해 보았습니까? – swiecki

+0

예 시도했는데, 작동하지 않았다. 문제는 모델 왼쪽에 모델 B가 들어 있기 때문이며, 모델 B가 내부 조인트 여야합니다. – user765368

답변

1

항상 CakePHP에서 실행되는 쿼리를 확인해야합니다. 디버그 레벨 2를 사용 가능하게하면 SQL 문이 페이지에 표시되어야합니다.

귀하의 경우, 용의NOT NULL이 정확하게 지정되지 않았습니다. 그것은 아마 이것 같이이어야한다;

$this->ModelA->find('first', array(
    'contain' => array(
     'Model B' => array(
      'conditions' => array(
       'NOT' => array(
        'ModelB.number' => NULL 
       ) 
      ) 
     ) 
    ), 
    'conditions' => array(
     'ModelA.id' => 13 
    ) 
)); 
+0

작동하지 않습니다. 내 모델이 제 쿼리에 반환됩니다. – user765368

+0

케이크가 문제를 발견했습니다. 실행되는 쿼리에서 왼쪽 조인, 내부 조인이 원하는 결과를 제공합니다. 자동으로 수행하는 조인 유형을 어떻게 변경할 수 있습니까? – user765368

+0

@ user765368 당신은 has/belongsTo 관계에' 'type'=> 'INNER''를 추가 할 수 있습니다 – thaJeztah