首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP -有没有一种直接查询HABTM表的方法?

CakePHP -有没有一种直接查询HABTM表的方法?
EN

Stack Overflow用户
提问于 2011-08-30 08:43:07
回答 2查看 373关注 0票数 1

我正在尝试检查试图管理教室的老师(在我的应用程序中)是否真的负责给定的教室。老师有教室,反之亦然。

有没有办法在教师模型中编写一种方法,其中我提供用户ID和教室ID,并根据对应于课堂的教师返回true或false。

我尝试了以下代码,但它给了我很多关于模型的额外信息,但我并不真正需要这些信息。一定有更好的方法:

代码语言:javascript
复制
$this->bindModel(array('hasOne' => array('ClassroomsTeachers')));
    return $this->find('all', array(
            'conditions' => array('ClassroomsTeachers.teacher_id' => $id),
    ));

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-30 10:11:26

HABTM关系只是一个hasMany-belongsTo关系的抽象。

Classroom hasMany ClassroomsTeacher belongsTo教师。

您可以像访问任何其他模型一样访问加入模型。如果表格为classrooms_teachers,则模型名称为ClassroomsTeacher (ClassroomsTeachers的单数)。

代码语言:javascript
复制
$this->Classroom->ClassroomsTeacher->find('count', array(
    'conditions' => array('teacher_id' => $id, 'classroom_id' => $classroomId)
));
票数 2
EN

Stack Overflow用户

发布于 2011-08-30 08:58:41

"Cake“的方法如下所示:

代码语言:javascript
复制
$this->Classroom->find('first',array(
    'conditions'=>array(
        'Classroom.id'=>$classrom_id_var
    ),
    'recursive'=>1
)

这使用默认的recursive标志。我强烈建议您使用类似的内置Containable行为,因此您可以执行以下操作:

代码语言:javascript
复制
$classdata = $this->Classroom->find('first',array(
    'conditions'=>array(
        'Classroom.id'=>$classrom_id_var
    ),
    'contain'=>array('Classroom')
)

这两种方法中的任何一种都会得到一个类似下面的数组:

代码语言:javascript
复制
array(
    [Classroom] => array(
        ...teacher data...
    ),
    [Teacher] => array(
        [0] => array(
            [id] => 4
            ....
        ),
        [1] => array( ...teacher 2 data... ),
        [2] => array( ...teacher 3 data... ),
    )
)

然后,您可以遍历教师数组,并确保有问题的教师在该数组中。

对于后一项任务,您可能希望使用有用的内置Set实用程序-您可以执行以下操作:

代码语言:javascript
复制
$teacherlist = Set::extract($classdata,'/Classroom/id');
if(in_array($teacherlist, $id)) {
    //They're okay
} else {
    //Return an error
}

如果你真的想把它写在一个模型函数中,可以查看find中的join选项--它比bindModel要简单得多。或者查看Habtamable behavior

(编辑为在重读问题后翻转)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7237591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档