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过程中一点经验分享,如果有不妥的地方,欢迎批评指正!
关注“顶求网”订阅号,获取更多技术文章和教程推送信息
ThinkPHP5 Model分层及多对多关联的建立的更多相关文章
- ThinkPHP5——模型关联(多对多关联)
关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...
- thinkphp5 model 模型
新增更新都是save.saveAll 怎么识别他们 实例化模型后调用save方法表示新增: 查询数据后调用save方法表示更新: save方法传入更新条件后表示更新: isUpdate(true): ...
- 05.Hibernate多对多关联
前言:本文讲解使用Hibernate映射多对多关联关系,并使用多种方式映射多对多关联. 1.数据库表的多对多关系 本文根据学生信息表(tb_student)和教师信息表(tb_teac ...
- mybatis实战教程二:多对一关联查询(一对多)
多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...
- Django QuerySet 方法梳理 。model外键 多对多的保存
引用:https://feifeiyum.github.io/2017/03/28/python-django-queryset/ 说明 Models 层是 Django 框架中最强大的部分之一, 大 ...
- Hibernate多对多关联
多对多关联: 示例:Teacher和Student,一个Teacher可以教很多student,一个Student也可以被很多teacher教 多对多单向关联 Teacher知道自己教了哪些学生, ...
- Hibernate一对多、多对一关联
一对多.多对一关联:在多方加外键 示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group 多对一单向关联 在User(多方)中建Group ...
- Python - Django - 作者表多对多关联书籍表
models.py 代码: from django.db import models # Create your models here. # 出版社 class Publisher(models.M ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
随机推荐
- Java中关于String的比较
关于String的各种==和equals,有的人搞不懂 简而言之 String s1 = "Hello" 声明的是一个常量,会在常量池里. ...
- Could..... not preload global game manager
发布PC版后出现这个错误,是没有破解成功,卸载后重新安装破解就可以了 http://www.cocoachina.com/bbs/read.php?tid=84587
- Java 加密Excel文件(打开时需输入密码)
收集:author: lifq package com.XXX.XXX.utils; import java.io.IOException; import com.jxcell.CellExcepti ...
- JavaScript函数变量作用域
变量作用域 在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量. 如果两个不同的函数各自申明了同一变 ...
- ISCC 2018——write up
WEB Web1-比较数字大小 直接修改input 标签里的maxlength 为999突破长度限制,使得能输入大于999 的数,然后随便输一个数字就行了 或者post修改值 Web2-Web01 s ...
- 小a和uim之大逃离(dp)
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 【PTA 天梯赛训练】修理牧场(哈夫曼树+优先队列)
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但是农夫自己没有锯子,请 ...
- 【Linux磁盘优化管理--RAID和LVM】
在现阶段的企业环境中,为了数据的安全性及完整性必须要有一个合理的存储方案.面对着每秒可能产生超过几TB的数据,考虑到磁盘能不能实现 热冗余,及扩容,缩容.Linux给出了RAID(磁盘阵列)以及LVM ...
- MIP组件开发 自定义js组件开发步骤
什么是百度MIP? MIP(Mobile Instant Pages - 移动网页加速器)主要用于移动端页面加速 官网参考:https://www.mipengine.org/doc/00-mip-1 ...
- 在python中安装basemap
在python中安装basemap 1. 确保python环境安装完毕且已配置好环境变量 2. 安装geos: pip install geos 3. 下载.whl文件: (1)pyproj‑1.9. ...