ThinkPHP5 Model分層及多對多關聯的創建

  筆者最近入手ThinkPHP5,準備用它來實現一個學生做業管理系統。簡單的說就是學生在上面交老師佈置的課程做業,老師也能夠發佈修改做業。過程當中勢必會碰到學生、班級和老師之間的關係。它們之間的關係是多對多的關係。下面咱們主要分析班級和做業的關係。每一個班級的學生能夠有多個做業,一樣的做業也能夠佈置給不一樣的班級。因此班級和做業之間的關係是多對多的關係。班級表(tb_clas),做業表(tb_task),中間表(tb_task_class)。下面寫Model層代碼,將Model層細分爲logic層、service層、Model層(將數據與邏輯分開)。php

Model層代碼以下:thinkphp

1.班級(clas.php)session

<?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)app

<?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中來寫這個邏輯(將數據與處理分開)thinkphp5

3.學生模型的Logic層this

<?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中代碼以下:spa

$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就能夠搞定了:code

{volist name="tasklist" id="task"}
                            
                            <li>
                                    <h4>{$task.task_title}</h4>
                                    <p>{$task.task_content}</p>    
                                    
                            </li>
                        {/volist}

 以上就是我用thinkphp5過程當中一點經驗分享,若是有不妥的地方,歡迎批評指正!blog

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

相關文章
相關標籤/搜索