笔者最近入手ThinkPHP5,准备用它来实现一个学生作业管理系统。简单的说就是学生在上面交老师布置的课程作业,老师也可以发布修改作业。过程势必会牵涉到学生、班级和老师之间的关系。它们之间有的关系是多对多的关系。
下面我们主要分析班级和作业的关系。每个班级的学生可以有多个作业,同样的作业也可以布置给不同的班级。所以班级和作业之间的关系是多对多的关系。可以按照这个逻辑将表分为:班级表(tb_clas),作业表(tb_task),中间表(tb_task_class)。下面写Model层代码,将Model层细分为logic层、service层、Model层(将数据与逻辑分开)。
Model层代码如下:
1.班级(clas.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)
~~~
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层
~~~
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"}
{$task.task_title}
{$task.task_content}
{/volist}
~~~