【问题标题】:cakephp - getting joins correctcakephp - 正确连接
【发布时间】:2013-12-10 16:29:49
【问题描述】:

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

我有一个用户表,用户有很多轮播表。旋转表看起来像

星期一上午

星期一下午

星期二上午

例如,如果用户将在 monday_pm 进入,则该字段将为 1。否则为 0。

我想获取属于特定房间的所有用户,已取消注册 = 0 并且 - 这就是我遇到问题的地方 - 有一个(例如)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 多个结果,这些结果大多是重复的!

如何才能在用户表和 Rotas 表中只获得一个具有所需条件的用户的记录,以及为什么像我这样进行联接会导致这么多结果?!?

谢谢

【问题讨论】:

  • 您是否有不想在模型中定义 hasMany 关系的原因?如果你这样做,你可以为相关模型添加条件,蛋糕会为你加入。 book.cakephp.org/2.0/en/models/…
  • 你的意思是像 $options['conditions'] = array('User.room_id'=>$room_id, 'User.deregistered'=>0, 'User.request'=>0, 'rota.'.$todaysDay.'_'.$amPm => 1);因为那没有用。根据book.cakephp.org/2.0/en/models/…hasmany 关系需要加入吗?

标签: php mysql sql cakephp cakephp-2.0


【解决方案1】:

假设您的 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
    )
));

【讨论】:

  • 嗨 Jage,谢谢你,它似乎工作得很好!虽然我已经建立了属于关系,但我从未想过像 $this->Rota 那样尝试它
猜你喜欢
  • 1970-01-01
  • 2015-03-20
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多