美文网首页
TP3 多对多关联查询

TP3 多对多关联查询

作者: Yohann丶blog | 来源:发表于2020-07-13 15:46 被阅读0次
651594626941_.pic.jpg

场景

一个学生可以选修多门课程,一个课程可以被多个学生选修,查询某个课程的信息及选修该课程的学生姓名列表或者查询某个学生的信息及该学生选修课程的名称列表。

数据模型

  • think_student 学生表
id student_name
1 柯南
2 元太
3 步美
4 小哀
5 光彦
  • think_subject 课程表
id subject_name
1 算数
2 图画
3 体育
  • think_student_subject 学生课程表
id student_id subject_id
1 1 1
2 3 2
3 1 3

多对多关联

  • 创建 SubjectModel.class.php 内容如下:
<?php
namespace Home\Model;
use Think\Model\RelationModel;
class SubjectModel extends RelationModel {
    protected $_link = array(
        'Student' => array(
            'mapping_type' =>  self::MANY_TO_MANY,
            'mapping_fields'    => 'student_name',
            'mapping_name'      =>  'Students',
            'foreign_key' =>  'subject_id',
            'relation_foreign_key' =>  'student_id',
            'relation_table' => 'think_student_subject',
        ),
    );
}
  • 创建 StudentModel.class.php 内容如下:
<?php
namespace Home\Model;
use Think\Model\RelationModel;
class StudentModel extends RelationModel {
    protected $_link = array(
        'Subject' => array(
            'mapping_type' =>  self::MANY_TO_MANY,
            'mapping_fields'    => 'subject_name',
            'mapping_name'      =>  'Subjects',
            'foreign_key' =>  'student_id',
            'relation_foreign_key' =>  'subject_id',
            'relation_table' => 'think_student_subject',
        ),
    );
}
  • 创建 TestController.class.php 内容如下:
<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller {
    public function manyToMany(){
        // 查询某个课程的信息及选修该课程的学生姓名列表
        $subject = D('Subject');
        $record = $subject->relation(Students)->find(3);
        echo json_encode($record);
        // 查询某个学生的信息及该学生选修课程的名称列表
        $student = D('Student');
        $record = $student->relation('Subjects')->find(1);
        echo json_encode($record);
    }
}

查询

{
    "id": "3",
    "subject_name": "体育",
    "students": [
        {
            "student_name": "光彦"
        },
        {
            "student_name": "柯南"
        }
    ]
}

查询体育课程的信息及选修该课程的学生姓名列表

{
    "id": "1",
    "student_name": "柯南",
    "Subjects": [
        {
            "subject_name": "算数"
        },
        {
            "subject_name": "体育"
        }
    ]
}

查询柯南学生的信息及该学生选修课程的名称列表

相关文章

  • TP3 多对多关联查询

    场景 一个学生可以选修多门课程,一个课程可以被多个学生选修,查询某个课程的信息及选修该课程的学生姓名列表或者查询某...

  • TP3 一对多关联查询

    场景 一个班级拥有多个学生,一个学生只能够属于某个班级,查询某个班级的信息及该班级的学生姓名列表。 数据模型 th...

  • Day60 - Flask模型关系与查询、钩子函数、装饰器登录校

    一对一关系 其他与一对多关系一样 一对多关系 一对多模型定义 一对多关系查询 多对多关系 多对多关系模型定义 定义...

  • 2018-12-20 模型关系和钩子函数

    一、模型关系定义 1.1 一对多   一对多关系中的查询操作 1.2 一对一 1.3 多对多   创建多对多关系 ...

  • 关联查询、子查询与分页查询

    关联查询 关联关系分为一对一,一对多,多对多关系关联查询就是从多张表中查询数据,当我们使用n张表使用关联查询,至少...

  • mybatis笔记 - 07

    2017 06 18 多对一和一对多关系的查询应用 多对一 关联表查询: 提出需求: 以学生和班级为例 : 站在学...

  • Bmob内部查询

    使用Bmob进行内部查询例如:查询带有图片的帖子的评论列表: 查询多对多关联如果希望查询喜欢该帖子(objectI...

  • 一对多联表查询

    基本需求是:商品表product 和 属性值表cat_value 之间是一对多关系,要求对商品表中的商品按一到多个...

  • Hibernater学习笔记(六)

    一、对象导航查询之前的客户和联系人的关系是一 对多的关系:一对多 场景:根据客户id查询客户,在查出该客户的所有联...

  • 数据库(二)

    DQL:查询语句 约束 数据库的设计 数据库的备份和还原 多对多关系图 一对多关系图 一对一关系图

网友评论

      本文标题:TP3 多对多关联查询

      本文链接:https://www.haomeiwen.com/subject/ppoacktx.html