0

我有两个模型:UsersLessons

  • User有一个Teacher
  • User拥有并属于许多Students

两者都是Teachers_StudentsUsers

在我的Users模型中,我有这个关联:

public $hasMany = array(
    'Lesson' => array(
        'className' => 'Lesson',
        'foreignKey' => 'user_id',
        'dependent' => false,
    )
);

在我的Lessons模型中,我目前有这个关联:

public $belongsTo = array(
    'Teacher' => array(
        'className' => 'User',
        'foreignKey' => 'teacher_id',
        'conditions' => array('Teacher.group_id' => '2'),
        'fields' => '',
        'order' => ''
    )
);

我的问题是:

  1. 为什么$teachers = $this->Lesson->Teacher->find('list');返回所有users而不只是返回teachers?为什么belongsTo模型部分中设置的条件不过滤结果以仅显示Users2group_idTeachers?如果这不是它应该工作的方式,那么在这里设置条件有什么意义呢?

    到目前为止,我每次都必须将它包含在 find 中,这似乎有点多余:$teachers = $this->Lesson->Teacher->find('list', array('conditions'=>array('Teacher.group_id'=>'2')))

  2. 我如何编写有很多学生的Students关联Lessons?以及如何为它设置数据库?

4

1 回答 1

0

1.关联中的条件应更改为包含模型的名称而不是别名:

'conditions' => array('User.group_id' => 2),

2.关联应该是hasAndBelongsToMany (HABTM),并且可以User像这样在您的模型中定义:

public $hasAndBelongsToMany = array(
    'Lessons' => array(
        'className' => 'Lesson',
        'joinTable' => 'lessons_users', // or the name from DB
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'lesson_id',
        'unique' => 'keepExisting' // Set this based on your needs, check link above
    )
);

鉴于上述关联,您需要lessons_users在数据库中创建一个新表来存储有关学生和课程之间这种关系的数据:

          +++++++++++++++++++++++++++++++++++++++++++++++++
          +  id (pk)  +  lesson_id (fk)  +  user_id (fk)  +
          +++++++++++++++++++++++++++++++++++++++++++++++++
          +     1     +         1        +        1       +
          +-----------+------------------+----------------+
          +     2     +         1        +        2       +
          +-----------+------------------+----------------+
          +     3     +         2        +        1       +
          +-----------+------------------+----------------+
          +     4     +         2        +        2       +
          +++++++++++++++++++++++++++++++++++++++++++++++++

从上面的例子;ID 为 1 的用户正在学习第 1 课和第 2 课,而 ID 为 2 的用户也正在学习第 1 课和第 2 课。同样,ID 为 1 的课程注册了 ID 为 1 和 2 的用户,ID 为 2 的课程也注册了 ID 为 1 和 2 的用户。

于 2014-10-19T07:51:26.960 回答