最受歡迎的php框架ThinkPHP在2018年10月29日迎來了最新一次的更新,以下是ThinkPHP更新的主要內容。
此版本主要修正了上一個版本存在的一些問題,並改進了關聯查詢部分。支援上一個版本的無縫升級!
主要更新
聚合查詢方法的欄位支援DISTINCT
修正定義路由後url函數的連接埠支援
修正控制器中間件對swoole的支援
改進Log類別save方法
#改進驗證類別的閉包驗證參數
多對多重關聯支援指定中間表格資料的名稱
關聯聚合查詢支援閉包方式指定聚合欄位
改進Lang類別get方法
多重對多重關聯增加判斷關聯資料是否存在的方法
改進關聯查詢使用fetchsql的情況
改進修改器的是否已經執行判斷
增加afterWith和beforeWith驗證規則用於比較日期欄位
#新版特性
控制器中間件改進
由於Swoole等模式下,類別庫常駐內存,控制器中間件第二次將不會執行,現在控制器中間件的執行過程不再納入架構函數。
模型改進
改進了修改器是否執行的判斷邏輯,如果沒有定義修改器方法,允許對模型資料的多次賦值。這樣,可以方便在模型事件中對資料進行修改。
聚合查詢的欄位支援使用DISTINCT,例如:
User::count('DISTINCT id');
關聯聚合查詢使用閉包的時候支援指定聚合欄位
User::withCount(['book' => function($query){ // 统计今年出版的书的数量 并且使用books_num作为统计字段返回 $query->whereTime('publish_time', 'y'); return 'books_num'; })->select();
針對多對多重關聯,還可以支援下面的用法
use think\Model; class User extends Model{ public function roles() { // 使用pivotDataName方法指定中间表的数据对象名称 return $this->belongsToMany('role') ->pivotDataName('userRole'); } }
$user = User::get(1); $role = Role::getByName('editor'); // 判断关联数据是否存在 如果存在则返回中间表对象 $pivot = $user->roles()->attached($role);
同時修正了當關聯查詢使用fetchSql方法導致的錯誤。
驗證規則改進
驗證規則如果使用了閉包,現在可以增加額外的參數,包括
// 新增的参数包括title(规则标题)和validate(当前验证对象) function($value, $data, $title, $validate) {}
額外新增了beforeWith和afterWith兩個驗證規則,用於比較多個日期欄位的資料。
$validate = Validate::make([ 'start_time' => 'require|beforeWith:end_time', 'end_time' => 'require|afterWith:start_time' ]); if (!$validate->check($data)) { dump($validate->getError()); }
擴展更新
這次更新還包含了一些官方擴充的更新:
增加SeasLog日誌擴充think -seaslog;
Swoole擴展更新至2.0.14版本;
單元測試擴展更新至2.0.5版本;
#相關課程推薦:
##################################################################################################################### ###最新ThinkPHP 5.1全球首發影片教學(60天成就PHP大牛線上訓練班課)############獨孤九賤(5)_ThinkPHP5影片教學###### ######ThinkPHP基礎實戰影片教學############thinkphp3.2 基礎影片教學######