首页
课程
圈子
文章
交流群
文档
工具
vscode代码片段
字幕提取
登录
首页
课程
圈子
文章
交流群
文档
工具
vscode代码片段
字幕提取
fastadmin 一对一和一对多关联模型查询
2024-10-10 20:51:16
875
0
0
0
文章目录
开通会员
解锁全部文章权限
立即开通
小程序码
扫一扫在小程序看此文章
热门文章
vscode里如果出现中文空格标出黄色突出显示,怎么去掉?
3349
php基础入门课程资料文档课件实战源码
3065
wordpress主题开发文档资料下载
2323
vscode插件code runner详细配置说明
2210
php进阶课程文档资料下载
1819
使用ffmpeg将mp4格式转为m3u8
1388
phpstudy怎么手动安装php8.3.0版本?
1199
推荐2款mac电脑里非常好用的php集成开发环境
1181
fastadmin监听或重写删除编辑按钮事件
1099
整理下php学员遇到的一些问题
1039
### 视频地址 一对一查询:https://www.bilibili.com/video/BV1gL4y1p7w3/ 一对多查询:https://www.bilibili.com/video/BV1kq4y16789/ ### 一对一 文档地址:https://doc.fastadmin.net/doc/controller.html#toc-4 ```php hasOne('关联模型名','本表外键名','本表主键名',['模型别名定义'],'join类型'); belongsTo('关联模型名','本表外键名','关联表主键名',['模型别名定义'],'join类型'); ``` 样例:4个表 fa_stuclass fa_student fa_studentmoney fa_stuscore 主表为:fa_student 实现:操作学生主表,增删改查 学费表和成绩表,查询班级表 ### 关联查询 控制器里 ```php protected $relationSearch = true; /** * 快速搜索时执行查找的字段 */ protected $searchFields = 'id,admin.username'; ``` ### 关联写入(新增) ```php $this->model->stuscore()->save(["score"=>111,"student_id"=>$this->model->id]); $this->model->studentmoney()->save(["money"=>12,"student_id"=>$this->model->id]); ``` ### 关联修改 ```php $row->stuscore->score="xx"; $row->studentmoney->money="xxx"; $row->together(['stuscore','studentmoney'])->save(); 关联删除 $v->together(['stuscore','studentmoney'])->delete(); // 或者 $v->stuscore()->delete(); $v->studentmoney()->delete(); ``` ### 一对多 ```php hasMany('关联模型名','本表外键名','本表主键名',['模型别名定义']); ``` ### 关联统计 withCount() 也可在前端做统计 ```php $this->model->withCount('score')->where($where)->select(); ``` ### 关联查询 貌似是tp5.0的问题,没找到更好的办法 ```php $total = $this->model ->alias('student') ->with(['stuclass','stuscore']) ->join('stuscore','stuscore.student_id = student.id','LEFT') ->where($where) ->group('student.id') ->count(); $list = $this->model ->alias('student') ->with(['stuclass','stuscore']) ->join('stuscore','stuscore.student_id = student.id','LEFT') ->distinct(true) ->where($where) ->order($sort, $order) ->limit($offset, $limit) // ->fetchSql(true) ->select(); ``` 注意with和join同时用可能会有问题,可以改写为alisa join写法 ```php $total = $this->model ->alias('student') ->join('stuscore','stuscore.student_id = student.id','left') ->join('studentmoney','studentmoney.student_id = student.id','left') ->field('student.*') ->where($where) ->group('student.id') ->count(); $list = $this->model ->alias('student') ->join('stuscore','stuscore.student_id = student.id','left') ->join('studentmoney','studentmoney.student_id = student.id','left') ->field('student.*') ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); foreach ($list as $row) { $row->stuscore = model('stuscore')->where('student_id',$row->id)->select(); $row->studentmoney = model('studentmoney')->where('student_id',$row->id)->select(); } ``` ### 关联新增 ```php $this->model->stuscore()->saveAll([ ["score"=>111,"student_id"=>$this->model->id], ["score"=>333,"student_id"=>$this->model->id] ]); ``` ### 关联修改 感觉没有这个场景吧,together()貌似不支持,我也不会~ 如果真要批量改的话,就这样吧: ```php $this->model->stuscore()->where('student_id',$ids)->update(["score"=>"888"]); ``` ### 关联删除 ```php foreach ($list as $k => $v) { $count += $v->delete(); $v->stuscore()->delete(); } ```
0
0
铜牌 · 会员
解锁全部文章
全部课程8折购买
如果在b站充值了专属会员,可联系猫叔直接开通相同时间的此会员
¥
50
/年
立即购买
金牌 · 会员
解锁全部文章
全部课程5折购买
微信一对一答疑
优先解决问题
¥
1999
/年
立即购买