我的应用程序中有2个模型与hasMany关系相关联。模型类hasMany Session ,类可以在多个城市中发生,也可以发布或取消发布。城市信息(city_id)存储在Class表中,但是类定时存储在会话表中,因为一个类可以有很多会话。
现在,我想列出所有类
不是那个类可以有多个会话,所以我们只想列出一次类(不是每个会话)。我正在使用一个像蛋糕教程的连接,但我不擅长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 :(得分: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);
答案 1 :(得分:0)
变化
'Session.start >= ' => date('Y-m-d H:i:s'),
到
'Session.start >= "'.date('Y-m-d H:i:s').'"',