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

  1. ThinkPHP5——模型关联(多对多关联)

    关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...

  2. thinkphp5 model 模型

    新增更新都是save.saveAll  怎么识别他们 实例化模型后调用save方法表示新增: 查询数据后调用save方法表示更新: save方法传入更新条件后表示更新: isUpdate(true): ...

  3. 05.Hibernate多对多关联

        前言:本文讲解使用Hibernate映射多对多关联关系,并使用多种方式映射多对多关联. 1.数据库表的多对多关系     本文根据学生信息表(tb_student)和教师信息表(tb_teac ...

  4. mybatis实战教程二:多对一关联查询(一对多)

    多对一关联查询 一.数据库关系.article表和user表示多对一的关系 CREATE TABLE `article` ( `id` ) NOT NULL AUTO_INCREMENT, `user ...

  5. Django QuerySet 方法梳理 。model外键 多对多的保存

    引用:https://feifeiyum.github.io/2017/03/28/python-django-queryset/ 说明 Models 层是 Django 框架中最强大的部分之一, 大 ...

  6. Hibernate多对多关联

    多对多关联: 示例:Teacher和Student,一个Teacher可以教很多student,一个Student也可以被很多teacher教   多对多单向关联 Teacher知道自己教了哪些学生, ...

  7. Hibernate一对多、多对一关联

    一对多.多对一关联:在多方加外键 示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group   多对一单向关联 在User(多方)中建Group ...

  8. Python - Django - 作者表多对多关联书籍表

    models.py 代码: from django.db import models # Create your models here. # 出版社 class Publisher(models.M ...

  9. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

随机推荐

  1. grunt_beginner

    前端集成解决方案:一套包含框架 和 工具,便于开发者快速构建美丽实用的web应用程序的工作流,同时 这套工作流必须是稳健强壮的. Yeman Bower web包管理器 框架.库.公共部分 Grunt ...

  2. 整理下react中常见的坑

    其实有些也不能算是坑,有些是react的规定,或者是react的模式和平常的js处理的方式不同罢了 1.setState()是异步的this.setState()会调用render方法,但并不会立即改 ...

  3. mycat常用的分片规则

    一.枚举法<tableRule name="sharding-by-intfile">    <rule>      <columns>user ...

  4. javascript 六种基本数据类型转换

    javascript 六种基本数据类型转换 1.显式转换 通过手动进行类型转换,Javascript提供了以下转型函数: 转换为数值类型:Number(mix).parseInt(string,rad ...

  5. zepto 基础知识(4)

    61.prev prev() 类型:collection prev(selector) 类型:collection 获取对相集合中每一个元素的钱一个兄弟节点,通过选择器来进行过滤 62.prev pr ...

  6. c++:请编写一个函数,对字符串“zheshigekendiedetimu”按从大到小的顺序排列,并截取后n位数(n为函数的一个参数)。

    String str="zheshigekendiedetimu"; StringBuffer buff=new StringBuffer(str); char[] arr=str ...

  7. ELK初学搭建

    目录:基础准备 修改相关系统配置 安装elasticsearch 安装 kibana 安装logstash X-pack插件的安装 登录网页查看 ELK名字解释 ELK就是ElasticSearch ...

  8. 利用nginx使ftp可以通过http访问

    ./nginx 启动服务./nginx -s stop 关闭服务./nginx -s reload 重新加载配置文件 搭建nginx映射ftp服务:打开nginx的配置文件nginx.conf(位于n ...

  9. PHP基础 (麦子学院 第二阶段)

    zendstudio 10.0破解版,新建完项目后,首先修改项目的编码方式,统一改成utf-8 (选中项目,再右键properties:Text file encoding).修改字体大小. apac ...

  10. HDSF读写文件

    HDFS 读取文件 HDFS的文件读取原理,主要包括以下几个步骤: 1.首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的   实例. 2.D ...