笔者最近入手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分层及多对多关联的建立相关推荐

  1. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  2. NHibernate从入门到精通系列(7)——多对一关联映射

    内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...

  3. Hibernate 关联映射 之 多对多 关联(二) 之拆分

    1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...

  4. Hibernate 关联映射 之 多对多 关联(一)

    1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...

  5. Hibernate双向多对多关联

    一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project {//编号private ...

  6. java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除

    hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...

  7. MyBatis多对多关联查询示例——MyBatis学习笔记之十八

    MyBatis系列的上一篇博客发表时,笑笑还没有出生.转眼间八个月过去了,他已经是个大宝宝了.这么长时间未更新MyBatis系列的博客,想来真是罪过.不过有了宝宝之后,的确会分散自己很大一部分精力. ...

  8. 多对多关联映射(双向)

    关联映射方面的最后一篇了,我觉得映射文件的编写是使用hibernate的基础,而关联映射又是基础的基础,所以这方面分的细一些,罗嗦一些,说明白就好,呵呵. 多对多关联(双向),相对单向,在实体上就是一 ...

  9. 二十七、PHP框架Laravel学习笔记——模型的多对多关联

    二.多对多关联 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张: (1) .users:用户表: (2) .roles:权限表: (3) .role_user:中间表:默认表名,user_i ...

最新文章

  1. Scrapy框架items数据建模、翻页请求、requests对象请求、meta参数的使用
  2. 我所理解的OOP——UML六种关系
  3. MappedByteBuffer,可以让文件直接在内存(堆外内存)修改,操作系统不需要拷贝一次。而如何同步到文件由NIO来完成
  4. h2 java tcpip_windows下创建h2集群,及java集成详细步骤
  5. Linux线程——线程创建和基本使用(多线程并发)
  6. TaskScheduler相关
  7. 线性代数 —— 矩阵快速幂
  8. 一行Python代码就可以下载任意网站视频,零基础小白也能轻松学会
  9. spring session spring:session:sessions:expires 源码跟踪
  10. fruit loops studio音乐宿主软件daw水果软件20.9中文版
  11. i219v微星 驱动_MSI微星
  12. 吴伯凡-认知方法论-聪明人如何避免犯错误
  13. 男cd是啥意思_伪娘cd是什么意思
  14. 一个破解压缩包密码的软件——ziperello
  15. 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比
  16. 学计算机的发说说,计算机说说
  17. s7五杀大数据英雄_S7入围赛战报:首个五杀!LYN击败GMB
  18. windows 10 搭建Omnipeek环境
  19. 我的PLSQL学习之路-基础
  20. 计算两个时间差,单位天、小时、分钟、秒

热门文章

  1. 中国大陆开源镜像站汇总
  2. 15:18 2009-7-5 小结
  3. 解析Linux操作系统文件目录
  4. html 怎么播放avi视频,iPhone4S视频格式播放巧用苹果转换器
  5. 弹出窗口显示输出内容_PCB生产文件输出流程
  6. python列表中的冒号_python 列表中[ ]中冒号‘:’的作用
  7. python表示数字6_【Python 1-6】Python教程之——数字
  8. 分享Kali Linux 2017年第31周镜像文件
  9. c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵三元组实现矩阵转置算法实验报告.doc...
  10. webapi控制器怎么接收json_一个秒杀系统的登录系统到底是怎么工作的