2012-03-09 2 views
0

내 응용 프로그램에는 hasMany 관계와 관련된 두 개의 모델이 있습니다. 모델 클래스 hasMany 세션 및 여러 도시에서 클래스가 발생할 수 있으며 게시하거나 게시 취소 할 수도 있습니다. 도시 정보 (city_id)는 클래스 테이블에 저장되지만 클래스는 많은 세션을 가질 수 있으므로 세션 테이블에 클래스 타이밍이 저장됩니다.케이크에 조인 PHP

지금, 나는 모든 클래스,

    활성
  • 수업 시작 시간이 특정 도시에서 일어나고> NOW

하지 클래스를 나열 할 여러 세션을 가질 수 있으므로 모든 세션이 아닌 클래스를 한 번만 나열하려고합니다. 나는 케익 튜토리얼에 따라 조인을 사용하고 있지만 SQL이 좋지 않아 작동하지 않으며 올바르게 작동하지 않을 것이라고 확신합니다. 아래는 코드입니다.

  $options['joins'] = array(
       array(
        'table' => 'sessions', 
        'alias' => 'Session', 
        'type' => 'left', 
        'conditions' => array(
          'Class.city_id' => $this->data['Class']['city_id'], 
          'Class.state' => 'active', 
          'Session.start >= ' => date('Y-m-d H:i:s'), 
          'Class.id' => 'Session.class_id' 
         ) 
       ) 
      ); 
      $classes = $this->Class->find('all', $options); 

이 코드는 과거에 발생한 모든 수업을 모든 도시에서 반환합니다. 누군가 나를 도울 수있어 위에서 언급 한 기준에 따라 올바른 클래스를 반환합니다.

+0

에? 이렇게하면 달성하고자하는 바를 쉽게 따라갈 수 있습니다. – Dave

답변

0

왼쪽이 아니라 오른쪽 조인이 필요합니다 (세션과 클래스가 있어야 함을 의미). 다음보십시오 :

$options['joins'] = array(
    array(
     'table' => 'sessions', 
     'alias' => 'Session', 
     'type' => 'right', 
     'conditions' => array(
      'Session.start >= ' => "'".date('Y-m-d H:i:s')."'", 
      'Class.id' => 'Session.class_id' 
     ) 
    ) 
); 
$options['conditions'] = array(
    'Class.city_id' => $this->data['Class']['city_id'], 
    'Class.state' => 'active' 
); 

$classes = $this->Class->find('all', $options); 
+0

고마워, 이걸 시험해 보자. –

+0

불행히도 이것은 작동하지 않습니다. 클래스를 전혀 반환하지 않습니다 (빈 세트). 한가지 SQL 덤프에서 발견 한 것은 $ options [조건]이 쿼리에 추가되지 않고 조인 부분 만 추가되고 있지만 뭔가를 반환해야한다는 것입니다. –

+0

재귀를 끄는 것을 잊지 않았습니까? '$ this-> Class-> recursive = -1;' – Costa

0

변화 당신이 등 ... 일정의에 클래스 (들)의 예를 줄 수

'Session.start >= ' => date('Y-m-d H:i:s'), 

'Session.start >= "'.date('Y-m-d H:i:s').'"',