我正在探索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数组。但我无法弄清楚如何以适当的方式加载这些变量!
感谢您的帮助!
答案 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(...)
),
...
)
这是你想要的吗?