加入Cake PHP

时间:2012-03-09 13:16:53

标签: mysql sql cakephp

我的应用程序中有2个模型与hasMany关系相关联。模型类hasMany Session ,类可以在多个城市中发生,也可以发布或取消发布。城市信息(city_id)存储在Class表中,但是类定时存储在会话表中,因为一个类可以有很多会话。

现在,我想列出所有类

  • 活跃
  • 在特定城市举行
  • 课程开始时间是> 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);

此代码将返回所有城市的所有课程,即使这些课程发生在过去。有人可以帮助我,所以它按照上面提到的标准返回正确的类。

2 个答案:

答案 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').'"',