笔者最近入手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. 在JavaScript中解析JSON? [重复]
  2. 每日一皮:这一定是“宅”的极致了...
  3. Tecplot如何提取某点数据并导出
  4. 小程序iconfont报错_【经验】开发微信小程序经验总结
  5. CentOS SSH配置
  6. 路由的跳转 , 动态路由的配置
  7. python列表购物
  8. 如何安装Python3.7,小白必看!
  9. HTML5 Web Storage
  10. 闹钟流程_国际航班流程全攻略(中转+不同航空公司+中转换机场+航班变动)
  11. Android 8.0正式版彩蛋,炸了!微信8.0竟然有18个彩蛋更新!
  12. shenyu自定义插件
  13. 服务器建网站要数据库,云服务器建网站需要数据库
  14. 华为matebook14摄像头无法启动问题
  15. C语言的clock函数
  16. Elang在Windows console下显示中文
  17. EASYOPS 运维平台绿色社区版 V1.2.10
  18. componentDidMount,react
  19. 【微信开发】获取微信头像的问题
  20. Verilog通过锁相环实现倍频,分频,相位偏移

热门文章

  1. sublime text 安装Package Control
  2. ubuntu下面搭建SolrCloud集群
  3. sql server 2008数据复制
  4. 关闭CISCO不必要的服务
  5. 在windowsXP系统下,如何通过手机蓝牙让电脑上网
  6. mysql注入 outfile_Mysql注入中的outfile、dumpfile、load_file函数详解
  7. C语言数组知识体系整理大学霸IT达人
  8. Kali Linux软件更新日报20190623
  9. centos php 安装mysql_CentOS 7 安装MySQL+PHP环境
  10. css怎么把横向菜单变纵向_压力容器钢板力学性能试验,横向取样的规定放松了?...