在Cakephp中加入表格

时间:2011-04-11 02:39:55

标签: cakephp

我正在探索cakePHP并试图让联接工作但失败了。任何帮助表示赞赏!情况:我有一个用户表和一个时隙表。每个时间段设置为hasMany用户(时间段意味着有2个用户会面):

var $hasMany = array(
 'Partner' => array(
  'className' => 'User',
  'foreignKey' => 'id'
 ),
'Student' => array(
  'className' => 'User',
  'foreignKey' => 'id'
 )
);

所以,我想要做的是加载时间段,并加入用户表以填充“合作伙伴”是谁以及“学生”是谁。现在我已经以这种方式设置了联接(对于学生):

    $params = array(
        'joins' => array(
            array(
                'table' => 'users',
                'alias' => 'User',
                'type' => 'LEFT',
                'conditions' => array(
                    'User.id = Timeslot.student_id',
                )
            )
        )
    );
    $this->set('timeslots', $this->Timeslot->find('all', $params)); 

在我的timelots变量中,当我到达视图时,由于$ hasMany关联,我有一个Partner数组和一个Student数组。但我无法弄清楚如何以适当的方式加载这些变量!

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

欢迎来到CakePHP!

看起来您的关系设置不正确。根据您的描述,时间段将有一个合作伙伴和一个学生。因此,应该定义的关系是belongsTo。您的时间表应该有两个外键,partner_id和student_id。然后在你的时间段模型中,声明:

var $belongsTo = array(
    'Partner' => array(
        'className' => 'User',
        'foreignKey' => 'partner_id'
    ),
    'Student' => array(
        'className' => 'User',
        'foreignKey' => 'student_id'
    )
);

应该会调用$ this-> Timeslot-> find()返回类似的内容:

array(
    0 => array(
        'Timeslot' => array(...),
        'Partner' => array(...),
        'Student' => array(...)
    ),
    1 => array(
        'Timeslot' => array(...),
        'Partner' => array(...),
        'Student' => array(...)
    ),
    ...
)

这是你想要的吗?