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

来源:http://www.cnblogs.com/nerd/archive/2016/10/26/6000834.html
-Advertisement-
Play Games

筆者最近入手ThinkPHP5,準備用它來實現一個學生作業管理系統。簡單的說就是學生在上面交老師佈置的課程作業,老師也可以發佈修改作業。過程中勢必會碰到學生、班級和老師之間的關係。它們之間的關係是多對多的關係。下麵我們主要分析班級和作業的關係。每個班級的學生可以有多個作業,同樣的作業也可以佈置給不同 ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可以在Index.php文件下 <?php 之前添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ...
  • REST是一種架構風格,其核心是面向資源,REST專門針對網路應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。REST提出設計概念和準則為: REST是一種架構風格,其核心是面向資源,REST專門針對網路應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。REST提出設計概念和準 ...
  • 監聽器的原理: 被監聽對象→對象擁有的事件→捕獲到事件變化→監聽器捕捉事件→監聽器處理該事件 Web伺服器上有4個範圍,拋開page範圍,還有request範圍,session範圍,application範圍。這些範圍的對象什麼時候創建,什麼時候銷毀,什麼時候往範圍中存放了數據,什麼時候替換了存放的 ...
  • 位元組流與和字元流的使用非常相似,兩者除了操作代碼上的不同之外,是否還有其他的不同呢?實際上位元組流在操作時本身不會用到緩衝區(記憶體),是文件本身直接操作的,而字元流在操作時使用了緩衝區,通過緩衝區再操作文件,如圖12-6所示。下麵以兩個寫文件的操作為主進行比較,但是在操作時位元組流和字元流的操作完成之後 ...
  • 最近在苦於思考kmeans演算法的MPI並行化,花了兩天的時間先把串列版本實現了。 聚類問題就是給定一個元素集合V,其中每個元素具有d個可觀察屬性,使用某種演算法將V劃分成k個子集,要求每個子集內部的元素之間相異度儘可能低,而不同子集的元素相異度儘可能高。 下麵是google到該演算法的一個流程圖,表意清 ...
  • 通過打電話的例子講解TCP的三次握手和四次揮手,通俗易懂,容易理解 ...
  • 前言 首先是例行的國際慣例,本文寫於本人學習設計模式的路上,適合同樣學習設計模式的朋友交流使用,大神誤入請留下您寶貴的意見,先行謝過; 前面我們已經學習過 簡單工廠模式 ,今天來學習第二個工廠模式 方法工廠模式 。 定義 百度百科 工廠方法模式的意義是定義一個創建產品對象的工廠介面,將實際創建工作推 ...
  • 英文文檔: class float([x]) Return a floating point number constructed from a number or string x. If the argument is a string, it should contain a decimal ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...