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 ...
最新文章
- 在JavaScript中解析JSON? [重复]
- 每日一皮:这一定是“宅”的极致了...
- Tecplot如何提取某点数据并导出
- 小程序iconfont报错_【经验】开发微信小程序经验总结
- CentOS SSH配置
- 路由的跳转 , 动态路由的配置
- python列表购物
- 如何安装Python3.7,小白必看!
- HTML5 Web Storage
- 闹钟流程_国际航班流程全攻略(中转+不同航空公司+中转换机场+航班变动)
- Android 8.0正式版彩蛋,炸了!微信8.0竟然有18个彩蛋更新!
- shenyu自定义插件
- 服务器建网站要数据库,云服务器建网站需要数据库
- 华为matebook14摄像头无法启动问题
- C语言的clock函数
- Elang在Windows console下显示中文
- EASYOPS 运维平台绿色社区版 V1.2.10
- componentDidMount,react
- 【微信开发】获取微信头像的问题
- Verilog通过锁相环实现倍频,分频,相位偏移
热门文章
- sublime text 安装Package Control
- ubuntu下面搭建SolrCloud集群
- sql server 2008数据复制
- 关闭CISCO不必要的服务
- 在windowsXP系统下,如何通过手机蓝牙让电脑上网
- mysql注入 outfile_Mysql注入中的outfile、dumpfile、load_file函数详解
- C语言数组知识体系整理大学霸IT达人
- Kali Linux软件更新日报20190623
- centos php 安装mysql_CentOS 7 安装MySQL+PHP环境
- css怎么把横向菜单变纵向_压力容器钢板力学性能试验,横向取样的规定放松了?...