2012-03-09 230 views
0

我的應用程序中有2個與hasMany關係相關的模型。模型類有許多會話和類可以發生在多個城市,他們也可以發佈或未發佈。城市信息(city_id)存儲在班級表中,但班級時間存儲在班級表中,因爲班級可以有很多會話。加入蛋糕PHP

現在,我想列出所有這些都是類,

  • 活躍
  • 發生在一個特定的城市
  • 開課時間>現在

不是階級可以有多個會話,所以我們只想列出一次類(不是每個會話)。我按照蛋糕教程使用連接,但是我不擅長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

你能給一個類(ES)與它的日程表...等的例子嗎?這將使您更容易遵循您希望完成的任務。 – Dave 2012-03-09 14:46:21

回答

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

謝謝,讓我試試看。 – 2012-03-10 04:29:30

+0

不幸的是,這是行不通的。它根本沒有返回任何類(空集)。我在SQL轉儲中注意到的一件事是$ options [conditions]沒有被添加到查詢中,只有連接部分被添加,但是它也應該返回一些東西。 – 2012-03-10 04:50:10

+0

你記得關閉遞歸嗎? '$ this-> Class-> recursive = -1;' – Costa 2012-03-10 23:04:30

0

變化

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

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