在一些中大型的應用架構設計中,通常會把模型分成數據層、邏輯層和服務層,控制器只會調用服務層方法。而查詢邏輯則基本上被封裝到邏輯層里面,數據層僅僅是做模型的各種定義。
而在簡單的應用里面,也可以采用PHP的Trait機制來實現代碼的復用機制。
用查詢范圍或搜索器簡化查詢
如果你使用模型查詢的話,把你的查詢條件盡量封裝到查詢范圍或者搜索器方法里面,查詢范圍和搜索器的區別主要在于查詢范圍比較適合定義一組(多個字段)查詢條件,如果要調用多個查詢范圍需要多次調用,而搜索器比較適合定義一個字段(其實并非絕對)的查詢條件,只需要調用一次withSearch方法。
使用查詢范圍和搜索器的例子。
<?php namespace appindexmodel; use thinkModel; class User extends Model { public function scopeVip($query) { $query->where('user_type', 'vip') ->where('status', 1) ->field('id,name'); } public function searchAgeAttr($query, $age) { $query->where('age','>',$age); } public function searchScoreAttr($query, $score) { $query->where('score','<=',$score)->where('score', '>' ,0); } }
控制器代碼
<?php namespace appindexcontroller; use thinkController; use thinkRequest; class index extends Controller { public function index(Request $request) { // 查詢VIP會員 User::vip()->select(); // 查詢年齡和分數 User::withSearch(['age,'score''], $request->param())->select(); } }
在控制器代碼中,我們只關注業務邏輯本身,而不需要關注這個邏輯內部的查詢條件是什么。更詳細的關于搜索器和查詢范圍的內容可以參考官方手冊。
PHP中文網,有大量免費的ThinkPHP入門教程,歡迎大家學習!
本文轉自:https://blog.thinkphp.cn/833794
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com