一对一关联
一对多关联
前言:本文仅介绍最常用的两个关联「一对一关联」「一对多关联」。
参考资料 :TP6 模型关联官方文档
一对一关联
参考资料:TP6 一对一关联官方文档
- hasOne() 正向关联,用于主表关联从表。
- belongsTo() 反向关联,用于从表反向关联主表。
关联查询
范例:教师表 正向关联 科目表
hasOne()基础用法
教师表文件 Teacher.php ↓
<?php
namespace app\index\model;
use think\Model;
class Teacher extends Model
{
//定义 Teacher 表关联到科目表
public function Course()
{
return $this->hasOne(Course::class,'tid','tid');
}
}
控制器 Index.php 文件 ↓
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Teacher;
class Index extends BaseController
{
public function index()
{
$teacher = new Teacher();
$data = $teacher->find(1);
//打印输出老师教授科目
dump($data->course->cname);
}
}
效果图 ↓
范例:科目表 反向关联 教师表
belongsTo() 基础用法
科目表文件 Course.php ↓
<?php
namespace app\index\model;
use think\Model;
class Course extends Model
{
public function Teacher()
{
return $this->belongsTo(Teacher::class,'tid','tid');
}
}
控制器 Index.php 文件 ↓
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Course;
class Index extends BaseController
{
public function index()
{
$course = new Course();
$data = $course->find(1);
//打印输出教授科目老师
dump($data->teacher->tname);
}
}
效果图 ↓
根据关联数据查询
范例:查询老师 id = 2 的姓名与所教科目
hasWhere() 基础用法
控制器 Index.php 文件 ↓
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Course;
class Index extends BaseController
{
public function index()
{
$course = new Course();
//根据关联数据,查询 老师表 id = 2 所教课程 对应的tid,科目名称,和老师的名称
$data = $course->hasWhere('teacher',['id' => '2'],'course.*,teacher.*')->select()->toArray();
//闭包查询
$data1 = $course->hasWhere('teacher',function ($query){
$query->where([['id','=','2']]);
},'course.*,teacher.*')->select()->toArray();
//打印输出
dump($data);
dump($data1);
}
}
效果图 ↓
一对一关联更新以或保存
save() 存在就更新,不存在就新增
更新范例:更新科目表 id = 1 的任课老师为 SnaiL
控制器 Index.php 文件↓
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Course;
class Index extends BaseController
{
public function index()
{
$course = new Course();
$data = $course->find(1);
echo '更新前<br>';
dump($data->teacher->tname);
$data->teacher->save(['tname' => 'SnaiL']);
echo '更新后<br>';
$data = $course->find(1);
dump($data->teacher->tname);
}
}
效果图↓
新增范例:新增 [物理] 科目,任课老师为 MaMaKa
<?php
namespace app\index\controller;
use app\BaseController;
use app\index\model\Teacher;
class Index extends BaseController
{
public function index()
{
$teacher = new Teacher();
$data = ['tname' => 'MaMaKa','tid' => '01'];
$id = $teacher->insertGetId($data);
$teach = $teacher->find($id);
$teach->course()->save(['cname' => '物理','cid' => '01']);
$rs = $teacher->find($id);
dump($rs->course->cname);
}
}
效果图 ↓
一对多关联
参考资料:TP6 一对多关联官方文档
- 一切操作,对标一对一关联范例😂😂😂
- 不是我懒,而是我真的懒