cakephp关联表关系

时间:2015-04-06 07:35:26

标签: php cakephp relationship

我有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',
       ),
   )
 )

3 个答案:

答案 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';

  }