ThinkPHP5 Model分层及多对多关联的建立
笔者最近入手ThinkPHP5,准备用它来实现一个学生作业管理系统。简单的说就是学生在上面交老师布置的课程作业,老师也可以发布修改作业。过程中势必会碰到学生、班级和老师之间的关系。它们之间的关系是多对多的关系。下面我们主要分析班级和作业的关系。每个班级的学生可以有多个作业,同样的作业也可以布置给不同的班级。所以班级和作业之间的关系是多对多的关系。班级表(tb_clas),作业表(tb_task),中间表(tb_task_class)。下面写Model层代码,将Model层细分为logic层、service层、Model层(将数据与逻辑分开)。
Model层代码如下:
1.班级(clas.php)
<?php
namespace app\index\model;
use think\Model;
class Clas extends Model
{public function task(){return $this->belongsToMany('Task','tb_task_clas');}
}
2.作业(task.php)
<?php
namespace app\index\model;
use think\Model;
class Task extends Model
{public function clas(){return $this->belongsToMany('Clas','tb_task_clas');}}
这样班级和作业模型之间的多对多关系就建立了。下面来实现查找某个学生所有被布置的作业列表。这又牵涉到学生表tb_Student,我们在学生模型的logic中来写这个逻辑(将数据与处理分开)
3.学生模型的Logic层
<?php
namespace app\index\logic;
use think\Model;
use app\index\model\Clas;
class Student extends Model
{//获取学生所在班级的所有作业public function getTasks($stuno){$stu=$this::get(['stu_no'=>$stuno]);$clas=Clas::get(['clas_id'=>$stu['clas_id']]);return $clas->task;}
}
这样在controller中实例化该logic后就可以查找任意学生所要做的作业了,Controller中代码如下:
$stulogic=\think\Loader::model('Student','logic');$stuno=$request->session('stuno');//dump($stulogic->getTasks($stuno));$tasklist=$stulogic->getTasks($stuno);//dump($tasklist);$this->assign('tasklist',$tasklist);
页面中用一个volist就可以搞定了:
{volist name="tasklist" id="task"}<li><h4>{$task.task_title}</h4><p>{$task.task_content}</p> </li>{/volist}
以上就是我用thinkphp5过程中一点经验分享,如果有不妥的地方,欢迎批评指正!
关注“顶求网”订阅号,获取更多技术文章和教程推送信息
转载于:https://www.cnblogs.com/nerd/p/6000834.html
ThinkPHP5 Model分层及多对多关联的建立相关推荐
- MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语
1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...
- NHibernate从入门到精通系列(7)——多对一关联映射
内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...
- Hibernate 关联映射 之 多对多 关联(二) 之拆分
1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...
- Hibernate 关联映射 之 多对多 关联(一)
1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...
- Hibernate双向多对多关联
一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project {//编号private ...
- java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...
- MyBatis多对多关联查询示例——MyBatis学习笔记之十八
MyBatis系列的上一篇博客发表时,笑笑还没有出生.转眼间八个月过去了,他已经是个大宝宝了.这么长时间未更新MyBatis系列的博客,想来真是罪过.不过有了宝宝之后,的确会分散自己很大一部分精力. ...
- 多对多关联映射(双向)
关联映射方面的最后一篇了,我觉得映射文件的编写是使用hibernate的基础,而关联映射又是基础的基础,所以这方面分的细一些,罗嗦一些,说明白就好,呵呵. 多对多关联(双向),相对单向,在实体上就是一 ...
- 二十七、PHP框架Laravel学习笔记——模型的多对多关联
二.多对多关联 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张: (1) .users:用户表: (2) .roles:权限表: (3) .role_user:中间表:默认表名,user_i ...
最新文章
- Scrapy框架items数据建模、翻页请求、requests对象请求、meta参数的使用
- 我所理解的OOP——UML六种关系
- MappedByteBuffer,可以让文件直接在内存(堆外内存)修改,操作系统不需要拷贝一次。而如何同步到文件由NIO来完成
- h2 java tcpip_windows下创建h2集群,及java集成详细步骤
- Linux线程——线程创建和基本使用(多线程并发)
- TaskScheduler相关
- 线性代数 —— 矩阵快速幂
- 一行Python代码就可以下载任意网站视频,零基础小白也能轻松学会
- spring session spring:session:sessions:expires 源码跟踪
- fruit loops studio音乐宿主软件daw水果软件20.9中文版
- i219v微星 驱动_MSI微星
- 吴伯凡-认知方法论-聪明人如何避免犯错误
- 男cd是啥意思_伪娘cd是什么意思
- 一个破解压缩包密码的软件——ziperello
- 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比
- 学计算机的发说说,计算机说说
- s7五杀大数据英雄_S7入围赛战报:首个五杀!LYN击败GMB
- windows 10 搭建Omnipeek环境
- 我的PLSQL学习之路-基础
- 计算两个时间差,单位天、小时、分钟、秒
热门文章
- 中国大陆开源镜像站汇总
- 15:18 2009-7-5 小结
- 解析Linux操作系统文件目录
- html 怎么播放avi视频,iPhone4S视频格式播放巧用苹果转换器
- 弹出窗口显示输出内容_PCB生产文件输出流程
- python列表中的冒号_python 列表中[ ]中冒号‘:’的作用
- python表示数字6_【Python 1-6】Python教程之——数字
- 分享Kali Linux 2017年第31周镜像文件
- c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵三元组实现矩阵转置算法实验报告.doc...
- webapi控制器怎么接收json_一个秒杀系统的登录系统到底是怎么工作的