一、建立数据库表
1.依据E-R图,建立数据表
外键: https://www.cnblogs.com/chenxiaohei/p/6909318.html
2.执行以下sql语句完成建表过程。
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `yunzhi_klass`
-- ----------------------------
DROP TABLE IF EXISTS `yunzhi_klass`;
CREATE TABLE `yunzhi_klass` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL DEFAULT '' COMMENT '名称',
`teacher_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '教师ID',
`create_time` int(11) NOT NULL DEFAULT '0',
`update_time` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `yunzhi_klass`
-- ----------------------------
BEGIN;
INSERT INTO `yunzhi_klass` VALUES ('1', '实验1班', '1', '0', '0'), ('2', '实验2班', '2', '0', '0'), ('3', '实验3班', '1', '0', '0'), ('4', '实验4班', '2', '0', '0');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
数据表的结构如下:
的确,当我们使用navicat来查看数据表时,我们发现,不但建立了数据表,而且还在该数据表中添加了四条数据。
二、班级模块
1. 建立班级模型
建tp5\application\common\model\Klass.php
<?php
namespace app\common\model;
use think\Model;
/**
* 班级模型
*/
class Klass extends Model
{
/**
* 根据ID获取Teacher对象
* 主要用于V层显示教师名字
*/
public function getTeacher(){
$teacherId=$this->getData('teacher_id');
$Teacher=Teacher::get($teacherId);
return $Teacher;
}
}
2.控制层
新建:tp5\application\index\controller\klassController.php
<?php
namespace app\index\controller;
use app\common\model\Klass;
class KlassController extends IndexController
{
public function index(){
$klasses=Klass::paginate(); //分页:默认15条
$this->assign('klasses',$klasses); //数据注册到V层
return $this->fetch(); //返回到v层
}
}
3.V层
新建:tp5\application\index\view\Klass\index.html
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>班级管理</title>
<!-- <link rel="stylesheet" type="text/css" href="/thinkphp5/public/static/bootstrap-3.3.5-dist/css/bootstrap.min.css"> -->
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body class="container">
<div class="row">
<div class="col-md-12">
<hr />
<div class="row">
<div class="col-md-8">
<form class="form-inline">
<div class="form-group">
<label class="sr-only" for="name">名称</label>
<input name="name" type="text" class="form-control" placeholder="名称..." value="{:input('get.name')}">
</div>
<button type="submit" class="btn btn-default"><i class="glyphicon glyphicon-search"></i> 查询</button>
</form>
</div>
<div class="col-md-4 text-right">
<a href="{:url('add')}" class="btn btn-primary"><i class="glyphicon glyphicon-plus"></i> 增加</a>
</div>
</div>
<hr />
<table class="table table-hover table-bordered">
<tr class="info">
<th>序号</th>
<th>名称</th>
<th>辅导员</th>
<th>操作</th>
</tr>
{volist name='klasses' id='klass' key='key' }
<tr>
<td>{$key}</td>
<td>{$klass->getData('name')}</td>
<!--根据ID获取对应的教师名字-->
<td>{$klass->getTeacher()->getData('name')}</td>
<td>
<a class="btn btn-danger btn-sm" href="{:url('delete?id=' . $klass->getData('id'))}"><i class="glyphicon glyphicon-trash"></i> 删除</a> <a class="btn btn-sm btn-primary" href="{:url('edit?id=' . $klass->getData('id'))}"><i class="glyphicon glyphicon-pencil"></i> 编辑</a>
</td>
</tr>
{/volist}
</table>
{$klasses->render()}
</div>
</div>
</body>
</html>
效果:http://tp5/index.php/index/klass/
4.分页配置
如果在数据表中添加足够多的数据,相信你会发现,如果我们不向paginate()中传入任何参数,那么每页将固定返回15条数据。产生的原因当然也很简单:默认值。
config.php中对分页配置设置了默认值,当然了,config.php中有200多行代码,近100项配置参数,如果有时间,推荐我们多浏览几遍。
统计修改每页返回数据条数
config.php
...
//分页配置
'paginate'=> [
'type' => 'bootstrap',
'var_page' => 'page',
'list_rows' => 5, // 修改分页显示5条数据
],
...
5.多次调用,一次运算
假设我们除了要查看辅导员姓名外,还想查看辅导员的ID。那么V层(index.html)应该进行如下改写。
...
<td>{$key}</td>
<td>{$klass->getData('name')}</td>
<td>
{$klass->getTeacher()->getData('name')}
{$klass->getTeacher()->getData('id')}
</td>
<td><a class="btn btn-danger btn-sm" href="{:url('delete?id=' . $klass->getData('id'))}"><i class="glyphicon glyphicon-trash"></i> 删除</a> <a class="btn btn-sm btn-primary" href="{:url('edit?id=' . $klass->getData('id'))}"><i class="glyphicon glyphicon-pencil"></i> 编辑</a></td>
...
6.重构及优化
<?php
namespace app\common\model;
use think\Model;
/**
* 班级模型
*/
class Klass extends Model
{
private $Teacher;
/**
* 根据ID获取Teacher对象
* 主要用于V层显示教师名字
*/
public function getTeacher(){
/只有Teacher对象不存在时才去根据Id查询对象,这样可以避免多次查询,浪费资源
if(is_null($this->Teacher)){
$teacherId=$this->getData('teacher_id');
$this->Teacher=Teacher::get($teacherId);
}
/若有对象则直接返回
return $this->Teacher;
}
}