cakephp - 加入正确的连接

时间:2013-12-10 16:29:49

标签: php mysql sql cakephp cakephp-2.0

我是一个新手,我无法正确查看我的cakephp查询。

我有一个用户表和用户hasmany rotas。 rotas表看起来像

monday_am

monday_pm

tuesday_am

如果用户应该在monday_pm中,那么该字段将为1.否则为0.

我希望得到属于特定房间的所有用户,已取消注册= 0和 - 这就是我遇到问题的地方 - 谁有一个rota,其中(例如)tuesday_am = 1

所以我有代码:

$options['conditions'] = array('User.room_id'=>$room_id, 'User.deregistered'=>0, 'User.request'=>0);

$options['joins'] = array(
            array('table' => 'rotas',
                  'alias' => 'rota',
                  'type' => 'INNER',
                  'conditions' => array('rota.'.$todaysDay.'_'.$amPm => 1)
                    )
                );

$usersToday = $this->User->find('all', $options);

如果我不尝试加入,那么我会得到一个很好的小用户列表,就像我期望的那样。如果我尝试连接,我会得到100个结果,这些结果大部分都是重复的!

如何在Users表和Rotas表中只获得具有所需条件的用户的一条记录,以及如何进行连接会导致如此多的结果?!

感谢

1 个答案:

答案 0 :(得分:0)

假设你的rota表中有一个名为user_id的列,你可以像这样制作你的Rota模型:

class Rota extends Model
{
    public $belongsTo = array('User');
}

然后在您的控制器中,您可以查询Rotas并从中获取用户。

$users = $this->Rota->find('all', array(
    'fields' => array('DISTINCT (User.id)' /* add more fields for selection */ ), 
    'conditions' => array(
        'User.room_id'=>$room_id,
        'User.deregistered'=>0,
        'User.request'=>0,
        'Rota.'.$todaysDay.'_'.$amPm => 1
    )
));