Thinkphp初学者教程:一对一模型连接
1.前言
本节介绍模型关系的使用。如果需要使用多个表一起查询数据,模型关联可以让你的代码更加简洁。一对一模型关系主要针对两个表中只有一对一关系或者只需要检索一对一关系的数据。
2。添加测试数据
为了方便展示,必须将数据添加到之前创建的 以 如下图: 下面贴出路由中定义的控制器和请求方法: 如下图所示: 使用 如下所示: ❙6.指定模型的绑定方法。 预加载相关信息可以在课程列表接口方法中使用 使用说明: 下面使用 提示:目前,❙a chera属性出现在字段❙a 上。一个列表。该字段是课程列表之一。有关教师的相关信息。 本节主要介绍如何在查询课程列表时,使用一对一模型关联的方式来关联教师信息,这样就不需要编写繁琐的联表查询逻辑了。 需要注意的是,一般最好使用模型关联 说明:代码库:https://gitee.com/love-for-poetry/tp6课程表(课程)
、教师表(教师)❀♼♼ SQL
为如下所示:
如下所示:
。 s:
如下图所示:
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');
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);
}
}
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
}
]
}
7。使用
with()
该方法卸载相关信息:
代码块 $students = CourseModel::where('status', 1)
->with('teacher')
->order('created_at DESC')
->paginate($size);
其中
。例如,如果模型不存在 with('teacher')
预加载属性teacher
,并且不能被动使用❙ teacherteacher
属性,调用 $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
}
}
9。总结
和
来预加载。最底层的预加载列表信息实际上是IN
,一次性查询所有列表。当在列表中被动执行内容时,可能会导致由多个请求引起的性能问题。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。