我有3张桌子
学生(ID,姓名)
科目(身份,科目)
student_subjects(id,student_id,subject_id)
students
表与使用subjects
表的many to many
关系中的student_subjects
相关
学生模特
public $hasMany = array(
'studentsSubject' => array(
'className' => 'studentsSubject',
'foreignKey' => 'students_id',
));
students_subjects model
public $belongsTo = array(
'Student' => array(
'className' => 'Student',
'foreignKey' => 'students_id',
));
当我查询
时$students = $this->Student->find('all');
debug($students);exit();
它会像这样返回
array(
'Student' => array(
'id' => '1',
'name' => 'smith',
),
'StudentSubject' => array(
0=>array(
'id' => '1',
'student_id'=>'1',
'subject_id'=>'1'
),
1=>array(
'id' => '2',
'student_id'=>'1',
'subject_id'=>'2'
),
)
)
虽然我希望主题名称而不是subjectID,如下所示
我知道我可以在find
进行更改,以获得所需的结果
但我的意思是,是否可能像链接students
表与'subject'而不是'student_subjects'
array(
'Student' => array(
'id' => '1',
'name' => 'smith',
),
'Subject' => array(
0=>array(
'id' => '1',
'subject'=>'maths',
),
1=>array(
'id' => '2',
'subject'=>'computer',
),
)
)
答案 0 :(得分:2)
您在students_subjects模型中与Student一起使用了Student。这是不正确的。而不是你需要使用Subject来制作belongsTo。
答案 1 :(得分:1)
为此,您应该使用HABTM分析。根据您的三个表定义,您只需要两个模型和它们之间的HABTM关系。
class Student extends AppModel {
public $hasAndBelongsToMany = array(
'Subject' =>
array(
'className' => 'Subject',
'joinTable' => 'student_subjects',
'foreignKey' => 'student_id',
'associationForeignKey' => 'subject_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'with' => ''
)
);
}
通过这种方式,您可以通过学生模型无需任何解决方法即可访问主题模型。
答案 2 :(得分:0)
更改模型类名称
Class Subject extends App_Model{
public $useTable = 'student_subjects';
}