ThinkPHP5关联模型查询指定字段

系统管理员 2023-06-28 09:00 89阅读 0赞

最近研究了一下TP5的关联模型,查文档,查了文档之后发现文档写的非常的简洁(不够详细),按文档的写法能查到数据,但是我其实只需要一两个字段查出来却是全字段数据,感觉非常浪费数据库资源,那么语法怎么写呢?查询了很多资料后总结出以下方式:

首先我有两张表,user表跟dept表,用user表的dept字段关联dept表的id字段,表设计如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lfd194X2s_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lfd194X2s_size_16_color_FFFFFF_t_70 1

第二:在User模型层中建立关联,代码如下:

  1. //关联部门表
  2. //param1:被关联表名称
  3. //param2: 被关联表的关联字段
  4. //param3:关联表的关联字段
  5. public function dept() {
  6. return $this->hasOne('Dept','id','dept');
  7. }

第三:控制器层写查询代码,$query的field字段必须要有被关联表(dept)的关联字段(id),否则报错,同理,UserModel的field一定要有关联表(user)的关联字段(dept):

  1. //根据用户id获取部门科室
  2. public function get_dept_office($id) {
  3. $res=UserModel::with(['dept'=>function($query){
  4. $query->field('id,path');
  5. }])->where('id',$id)->field('dept,id')->find();
  6. return $res->Dept->path;
  7. }

查询结果:

2020010816160527.png

完工!

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ThinkPHP5关联模型查询指定字段

    最近研究了一下TP5的关联模型,查文档,查了文档之后发现文档写的非常的简洁(不够详细),按文档的写法能查到数据,但是我其实只需要一两个字段查出来却是全字段数据,感觉非常浪费数据