TP3 一对多关联查询

91 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 image.png

场景

一个班级拥有多个学生,一个学生只能够属于某个班级,查询某个班级的信息及该班级的学生姓名列表。

数据模型

  • think_student 学生表
idstudent_nameclass_id
1柯南2
2元太2
3步美2
4小哀2
5光彦2
  • think_class 班级表
idclass_name
1一年级A班
2一年级B班
3一年级C班

代码

  • 创建 ClassModel.class.php 内容如下:
<?php
namespace Home\Model;
use Think\Model\RelationModel;
class ClassModel extends RelationModel {
    protected $_link = array(
        'Student'=>array(
            'mapping_type'      => self::HAS_MANY,
            'mapping_fields'    => 'student_name',
        )
    );
}
  • 创建 StudentModel.class.php 内容如下:
<?php
namespace Home\Model;
use Think\Model\RelationModel;
class StudentModel extends RelationModel {
    protected $_link = array(
        'Class'=>array(
            'mapping_type'      => self::BELONGS_TO,
        ),
    );
}
  • 创建 TestController.class.php 内容如下:
<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller {
    public function oneToMany(){
        $class = D('Class');
        $record = $class->relation('Student')->find(2);
        echo json_encode($record);
    }
}

查询

{
    "id": "2",
    "class_name": "一年级B班",
    "Student": [
        {
            "student_name": "柯南"
        },
        {
            "student_name": "元太"
        },
        {
            "student_name": "步美"
        },
        {
            "student_name": "小哀"
        },
        {
            "student_name": "光彦"
        }
    ]
}