ThinkPHP5数据库实例详解

浏览21089
更新时间2022-01-20

column 方法

1、功能:获取符合条件记录中各列字段所组成的数组

注意有以下几个关键字:

  1. 可以是一条记录,也可以多条记录,这与value方法不同的;
  2. 返回值是一个数组,而非单值,这与value方法也不相同;
  3. 可以返回一列数据,也可返回多列数组,返回多列时以二维数组展示。

2、源码:/thinkphp/library/think/db/Query.php

3、参数与返回值:

1. 参数

序号 参数 说明
1 字段名 表中存在的字段名称
2 键名 设置数组元素的键名,默认为参数中的第一个字段名

2. 返回值

序号 参数 说明
1 一维数组 当只有$field字段参数,且只有一个字段时,键名是从0开始索引数组
2 二维数组 当字段参数参数二个时,结果自动转为二维数组,当设置了第二个参数$key时,可指定数组元素键名

4、语法:

Db::table( '数据表名' ) -> where( 查询条件 ) -> column( '字段列表', '数组键名'  ) ;
  • 当字段列表不于二个字段时,结果是一维数组,键名为第一个字段
  • 当字段列表大于二个字段时,结果是二维数组,键名如不指定则为首字段
  • 如指定的键名,不在字段列表中,将做为首字段插入到字段列表中。

5、演示实例:

任务1:查询id > 1020 记录中的name字段值

  • 表中数据,红框内的是我们要操作的数据

  1. 参数只传入一个字段值时,返回一维数组;
  2. 因为没有传入指定键名,该数组的键名为默认的从0开始的索引数组
    (索引数组:由键名从0开始的连续正整数构成的数组)
  • Index.php 控制器文件:
<?php
namespace app\index\controller;

//导入数据库类
use think\Db;
class Index {
    public function index() {    
      //1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字

      $result = Db::table('tp5_staff')  //设置当前数据表tp5_staff
              ->where('id > 1020')    // 设置查询条件 id > 1020
               // 获取满足id>1020的所有记录的name字段值,打包到一维索引数组返回
              ->column('name');  

              //查询查询结果      
              dump($result);
      }
}       
  • 运行结果:
//结果为一维数组,键名为默认的数定索引,键值是name字段值
array(5) {
  [0] => string(6) "梦姑"
  [1] => string(9) "段王爷"
  [2] => string(9) "鲁大师"
  [3] => string(9) "程序员"
  [4] => string(6) "方方"
}

任务2:查询id > 1020 记录中的name, age字段值

  1. 参数只传入二个字段名,并不设置键名时,返回一维数组;
  2. 因为没有传入指定键名,该数组的键名为参数字段列表中的第一个
  3. 返回数组类型由做键名的字段值决定,数值型就是索引数组,字符或日期型就是关联数组
  4. 本例中,字段列表是:name,age,所以数组元素格式为:['name'] => age
  • Index.php 控制器文件:
<?php
namespace app\index\controller;

//导入数据库类
use think\Db;
class Index {
    public function index() {    
      //1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字

      $result = Db::table('tp5_staff')  //设置当前数据表tp5_staff
              ->where('id > 1020')    // 设置查询条件 id > 1020
               // 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
              ->column('name,age');  

              //查询查询结果      
              dump($result);
      }
}       
  • 运行结果:
array(5) {
// 第一个字段名自动转为键名,第二个字段为值
  ["梦姑"] => int(18)
  ["段王爷"] => int(90)
  ["鲁大师"] => int(60)
  ["程序员"] => int(42)
  ["方方"] => int(90)
}
  • 现在我们调整一下colume参数中的字段顺序
//将age 调整到 name 的前面
  ->column('age,name');  
  • 现在查询结果是:
//可以看到结果,恰好与上面是相反的,键名与值交换了位置
array(4) {
  [18] => string(6) "梦姑"
  [90] => string(6) "方方"
  [60] => string(9) "鲁大师"
  [42] => string(9) "程序员"
}

任务3:查询id > 1020 记录中的name, age,hiredate字段值

按上面的逻辑,我们知道,二个字段时,其中一个字段值以键名方式出现在结果中,那么三个字段时,怎么办呢?
解决方案:用二维数组表示
那么问题来了?> 哪个字段应该是二维数组中,各个元素的键名呢?
是和前面案例一样,取第一个字段名吗?我们试一下,就知道了~~~

  • 现在的Index.php 控制器代码如下 :
<?php
namespace app\index\controller;

//导入数据库类
use think\Db;
class Index {
    public function index() {    
      //1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字

      $result = Db::table('tp5_staff')  //设置当前数据表tp5_staff
              ->where('id > 1020')    // 设置查询条件 id > 1020
               // 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
              ->column('name,age,hiredate');  

              //查询查询结果      
              dump($result);
      }
}       
  • 运行结果如下:
// 二维数组中,每个数组元素的键名,就是字段列表中的第一个字段名
array(5) {
  ["梦姑"] => array(3) {
    ["name"] => string(6) "梦姑"
    ["age"] => int(18)
    ["hiredate"] => string(10) "2012-10-10"
  }
  ["段王爷"] => array(3) {
    ["name"] => string(9) "段王爷"
    ["age"] => int(90)
    ["hiredate"] => string(10) "2015-12-31"
  }
  ["鲁大师"] => array(3) {
    ["name"] => string(9) "鲁大师"
    ["age"] => int(60)
    ["hiredate"] => string(10) "2012-09-09"
  }
  ["程序员"] => array(3) {
    ["name"] => string(9) "程序员"
    ["age"] => int(42)
    ["hiredate"] => string(10) "2008-12-29"
  }
  ["方方"] => array(3) {
    ["name"] => string(6) "方方"
    ["age"] => int(90)
    ["hiredate"] => string(10) "2015-12-31"
  }
}

任务4:查询id > 1020 记录中的name, age字段值,指定键名为:age

我们前面一直在用默认值来设定数组的键名,其实就是可以设定的。
本例中,我们人为设定为:age

  • Index.php 控制器文件:
<?php
namespace app\index\controller;

//导入数据库类
use think\Db;
class Index {
    public function index() {    
      //1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字

      $result = Db::table('tp5_staff')  //设置当前数据表tp5_staff
              ->where('id > 1020')    // 设置查询条件 id > 1020
               // 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
              ->column('name,age','age');  

              //查询查询结果      
              dump($result);
      }
}       
  • 运行结果:
//这和前面,通过人为调整字段顺序,设定键名的结果是一样的
//显然,这种试更加的灵活
array(4) {
  [18] => string(6) "梦姑"
  [90] => string(6) "方方"
  [60] => string(9) "鲁大师"
  [42] => string(9) "程序员"
}

我们再大胆猜想一下,能不能指定一个不在字段列表中出现的字段,当做键名呢?例如,当前字段列表是:name,age,而我们指定键名为:hiredate,是否可行?请看下面案例:

任务5:查询id > 1020 记录中的name, age字段值,指定键名为:hiredate

  • Index.php 控制器文件:
<?php
namespace app\index\controller;

//导入数据库类
use think\Db;
class Index {
    public function index() {    
      //1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字

      $result = Db::table('tp5_staff')  //设置当前数据表tp5_staff
              ->where('id > 1020')    // 设置查询条件 id > 1020
               // 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
              ->column('name,age','hiredate');  

              //查询查询结果      
              dump($result);
      }
}       
  • 查询结果如下(神奇一幕出现了):
  • 做为键名的hiredate字段,原本不在字段列表中,现在却自动被添加到字段列表中并显示出来了。
  • 所以,当前的字段列表变成了: hiredate,name,age,因为你指定的键名是hiredate,所以这个hiredate字段,也理所当然的排到字段列中的第一位
//指定的键名,自动插入到当前字前列表的第一位
//因为超过了二个字段,因为结果是二维数组
array(4) {
  ["2012-10-10"] => array(3) {
    ["hiredate"] => string(10) "2012-10-10"
    ["name"] => string(6) "梦姑"
    ["age"] => int(18)
  }
  ["2015-12-31"] => array(3) {
    ["hiredate"] => string(10) "2015-12-31"
    ["name"] => string(6) "方方"
    ["age"] => int(90)
  }
  ["2012-09-09"] => array(3) {
    ["hiredate"] => string(10) "2012-09-09"
    ["name"] => string(9) "鲁大师"
    ["age"] => int(60)
  }
  ["2008-12-29"] => array(3) {
    ["hiredate"] => string(10) "2008-12-29"
    ["name"] => string(9) "程序员"
    ["age"] => int(42)
  }
}

6、总结:

column 方法,将查询结果以一种很灵活的方式返回,让程序员有了更大的发挥空间处理数据,一定要熟练掌握它

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.7万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.4万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.2万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载