为什么模型关联中的条件不过滤CakePHP中控制器中的查找结果?

为什么模型关联中的条件不过滤CakePHP中控制器中的查找结果?,cakephp,cakephp-2.5,Cakephp,Cakephp 2.5,我有两个模型:用户和课程 用户有一名教师 用户拥有并属于许多学生 教师和学生都是用户 在我的用户模型中,我有以下关联: public $hasMany = array( 'Lesson' => array( 'className' => 'Lesson', 'foreignKey' => 'user_id', 'dependent' => false, ) ); public $belongsTo = ar

我有两个模型:用户和课程

用户有一名教师 用户拥有并属于许多学生 教师和学生都是用户

在我的用户模型中,我有以下关联:

public $hasMany = array(
    'Lesson' => array(
        'className' => 'Lesson',
        'foreignKey' => 'user_id',
        'dependent' => false,
    )
);
public $belongsTo = array(
    'Teacher' => array(
        'className' => 'User',
        'foreignKey' => 'teacher_id',
        'conditions' => array('Teacher.group_id' => '2'),
        'fields' => '',
        'order' => ''
    )
);
在我的课程模型中,我目前有以下关联:

public $hasMany = array(
    'Lesson' => array(
        'className' => 'Lesson',
        'foreignKey' => 'user_id',
        'dependent' => false,
    )
);
public $belongsTo = array(
    'Teacher' => array(
        'className' => 'User',
        'foreignKey' => 'teacher_id',
        'conditions' => array('Teacher.group_id' => '2'),
        'fields' => '',
        'order' => ''
    )
);
我的问题是:

为什么$teachers=$this->Lesson->Teacher->find'list';返回所有用户,而不仅仅是教师?为什么在模型的belongsTo部分设置的条件不过滤结果,只显示组id为2的用户,即教师?如果这不是它应该工作的方式,那么在这里设置条件有什么意义呢

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

我如何编写学生协会,使课程有许多学生?我如何为它建立数据库

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

'conditions' => array('User.group_id' => 2),
二,。关联应该是,并且可以在用户模型中定义,如下所示:

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
    )
);
考虑到上述关联,您需要在数据库中创建一个新的“课程用户”表,以存储有关学生和课程之间关系的数据:

          +++++++++++++++++++++++++++++++++++++++++++++++++
          +  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的用户。

1更改使用模型名而不是别名的条件会导致sql错误,据我所知,CakePHP在查询中使用别名?2这如何帮助我访问课程模型中的学生1我不确定这一点,但我认为您不能使用别名,因为这是您定义别名的起点!2如果以前没有,则必须将相同的关联更改字段名ofc添加到课程模型中,然后对两个模型使用可包含行为来查找数据。关于问题的数据库部分,请勾选此项:您需要共享您当前的表用户、教师、学生、课程、用户和教师等,以及这些表的主键和外键。您的问题令人困惑,因为由于使用了Cakephp术语,用户有一个教师的语句意味着两个表。但是,课程模型中的belongsTo关系将教师描述为用户表的子集。