最近研究了一下TP5的關聯模型,查文檔,查了文檔之後發現文檔寫的非常的簡潔(不夠詳細),按文檔的寫法能查到數據,但是我其實只需要一兩個字段查出來卻是全字段數據,感覺非常浪費數據庫資源,那麼語法怎麼寫呢?查詢了很多資料後總結出以下方式:
首先我有兩張表,user表跟dept表,用user表的dept字段關聯dept表的id字段,表設計如下:
第二:在User模型層中建立關聯,代碼如下:
//關聯部門表
//param1:被關聯表名稱
//param2: 被關聯表的關聯字段
//param3:關聯表的關聯字段
public function dept() {
return $this->hasOne('Dept','id','dept');
}
第三:控制器層寫查詢代碼,$query的field字段必須要有被關聯表(dept)的關聯字段(id),否則報錯,同理,UserModel的field一定要有關聯表(user)的關聯字段(dept):
//根據用戶id獲取部門科室
public function get_dept_office($id) {
$res=UserModel::with(['dept'=>function($query){
$query->field('id,path');
}])->where('id',$id)->field('dept,id')->find();
return $res->Dept->path;
}
查詢結果:
完工!