Code前端首页关于Code前端联系我们

Thinkphp初学者教程:一对一模型连接

terry 2年前 (2023-09-24) 阅读数 86 #后端开发

1.前言

本节介绍模型关系的使用。如果需要使用多个表一起查询数据,模型关联可以让你的代码更加简洁。一对一模型关系主要针对两个表中只有一对一关系或者只需要检索一对一关系的数据。

2。添加测试数据

为了方便展示,必须将数据添加到之前创建的课程表(课程)教师表(教师)❀♼♼ SQL为如下所示:
如下所示:
thinkphp菜鸟教程:一对一模型关联。 s:
thinkphp菜鸟教程:一对一模型关联如下图所示:
thinkphp菜鸟教程:一对一模型关联

3.接口路由定义

课程(课程)的数据请求为例,课程通过一对一的信息模型关联

{
     "id": 1,
     "course_name": "广义相对论",
     "teacher_id": 1,
     "created_at": 1603617951,
     "update_at": 0,
     "status": 1,
     "teacher": {
         "id": 1,
         "name": "爱老师",
         "age": 24,
         "id_number": "52011720100506XXXX",
         "created_at": 1603617951,
         "update_at": 0,
         "status": 1
     }
 }
:对应教师信息模型
Route::get('courses','app\controller\Study\CourseController@courseList');
代码块

如下图:
thinkphp菜鸟教程:一对一模型关联

4.控制器和方法定义

下面贴出路由中定义的控制器和请求方法:

<?php
namespace app\controller\Study;
use app\BaseController;
use app\Models\Study\CourseModel;
class CourseController extends BaseController
{
    /**
     * 获取教师列表
     */
    public function courseList()
    {
        $size = (int)$this->request->param('size', 15);
        $students = CourseModel::where('status', 1)->order('created_at DESC')->paginate($size);
        return json($students);
    }
}
代码块

如下图所示:
thinkphp菜鸟教程:一对一模型关联

5。请求课程列表接口数据

使用postman 请求接口数据,如下所示:

{
    "total": 6,
    "per_page": 10,
    "current_page": 1,
    "last_page": 1,
    "data": [
        {
            "id": 1,
            "course_name": "广义相对论",
            "teacher_id": 1,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        },
        {
            "id": 2,
            "course_name": "电动力学",
            "teacher_id": 2,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        },
        {
            "id": 3,
            "course_name": "电磁学",
            "teacher_id": 3,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        },
        {
            "id": 4,
            "course_name": "光学",
            "teacher_id": 4,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        },
        {
            "id": 5,
            "course_name": "信息论",
            "teacher_id": 5,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        },
        {
            "id": 6,
            "course_name": "天文学",
            "teacher_id": 6,
            "created_at": 1603617951,
            "update_at": 0,
            "status": 1
        }
    ]
}
代码块

如下所示: ❙6.指定模型的绑定方法。 thinkphp菜鸟教程:一对一模型关联

7。使用

预加载相关信息可以在课程列表接口方法中使用with()该方法卸载相关信息:

 $students = CourseModel::where('status', 1)
     ->with('teacher')
     ->order('created_at DESC')
     ->paginate($size);
代码块

使用说明:其中with('teacher')预加载属性teacher,并且不能被动使用❙ teacher。例如,如果模型不存在 teacher 属性,调用 $studentModel->teacher 属性将触发同名的模型关系 ❙❙❙❀。

8。关联型号后索要数据

下面使用postman请求部分接口数据,如下:

{
     "id": 1,
     "course_name": "广义相对论",
     "teacher_id": 1,
     "created_at": 1603617951,
     "update_at": 0,
     "status": 1,
     "teacher": {
         "id": 1,
         "name": "爱老师",
         "age": 24,
         "id_number": "52011720100506XXXX",
         "created_at": 1603617951,
         "update_at": 0,
         "status": 1
     }
 }
代码块

提示:目前,❙a chera属性出现在字段❙a 上。一个列表。该字段是课程列表之一。有关教师的相关信息。

9。总结

本节主要介绍如何在查询课程列表时,使用一对一模型关联的方式来关联教师信息,这样就不需要编写繁琐的联表查询逻辑了。

需要注意的是,一般最好使用模型关联来预加载。最底层的预加载列表信息实际上是IN,一次性查询所有列表。当在列表中被动执行内容时,可能会导致由多个请求引起的性能问题。

说明:代码库:https://gitee.com/love-for-poetry/tp6

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门