筆者最近入手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}
~~~
- 目錄
- 5.0.10環境配置
- 5.0.10控制器模型對象
- 5.0.10模型初始化
- 5.0.10定義數據對象
- 5.0.10創建數據對象data()方法
- 5.0.10創建數據對象-setAttr方法
- 5.0.10創建數據對象__set()方法
- 5.0.10查詢數據對象getData()
- 實例
- 5.0.10保存數據save()方法
- 5.0.10保存數據saveAll()
- 5.0.10更新數據save()
- 5.0.10批量更新數據saveAll()
- 5.0.10刪除數據delete()
- 5.0.10刪除數據destroy()
- 5.0.10traits詳解
- ThinkPHP 5.0 速查表
- 注釋
- 環境變量配置
- Model分層
- MVC 邏輯服務數據
- Model分層及多對多關聯的建立
- 控制器調用邏輯層
- Session
- 子域名session共享
- 系統錯誤
- 版本錯誤
- 返回錯誤
- Token令牌及身份識別
- 關聯查詢
- 安裝
- Git安裝
- Composer
- 擴展
- Composer類
- 非Composer類
- 引用第三方庫
- 自定義命令行
- 計劃任務
- 調試
- 調試模式
- 監聽SQL
- 數據庫調試
- 單元測試
- 初始化
- 控制器初始化
- 模型初始化
- 數據緩存
- 實戰
- 版本升級
- 從V5.0.17升級到V5.0.18