2013-12-10 42 views
0

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

我有一个用户表和用户hasmany旋转。所述ROTAS表看起来像

monday_am

monday_pm

tuesday_am

,并且如果用户是由于在上monday_pm例如,则该字段将有1。否则0.

我想获得所有属于某个房间的用户,已注销= 0和 - 这是我在哪里“M有问题 - 谁拥有罗塔其中(例如)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

是否有你不想在模型中定义hasMany关系的原因?如果你这样做,你可以只为相关模型添加条件,蛋糕会为你加入。 http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html – Jage

+0

你的意思是像$ options ['conditions'] = array('User.room_id'=> $ room_id, 'User.deregistered'=> 0,'User.request'=> 0,'rota。'。$ todaysDay。'_'。$ amPm => 1);因为这没有用。根据http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables hasmany关系需要加入? –

回答

0

假设你已经在你的值班表中的列名为user_id的,你可以让你的罗塔模式是这样的:

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 
    ) 
)); 
+0

嗨杰格,谢谢你,它似乎完美的工作!虽然我有属于自己的关系,但我从来没有想过要像$ this-> Rota那样尝试 –