筆者最近入手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過程中一點經驗分享,如果有不妥的地方,歡迎批評指正!

關注“頂求網”訂閱號,獲取更多技術文章和教程推送信息
