获取单列或多列字段值:column( )
该方法很有意思,其返回结果由字段数量决定
一个字段:返回一维数组;
二个字段:返回一维数组,第一个字段为键名,第二个字段为元素值;
三个或更多字段:返回二维数组,第一个字段为键名,全部字段值为数据元素;
指定键名:方法的第二个参数,可以自定义结果数组的键名。
可能看上去有点乱,没关系,看上几个实例就明白了。
PHP中文网数据库操作教程:点击查看
1. 说明
该方法原型来自于数据库查询,官方手册只给出column方法的一种使用方法。本节课我们给出其它几种使用方法,与value方法有点像哟~~
废话不讲,直接上实例
2. 实例演示
任务:获取tp5_staff表中,id=1010到1015之间的的员工id,姓名,年龄,工资
模型:/application/index/model/Staff.php
namespace app\index\model;//导入模型类use think\model;class Staff extends model {//自定义模型类代码}
控制器: /application/index/controller/Index.php
同样,我们也像value方法一样提供三种实现方式,除第一种外,其它二种官方手册中并未提及
一、模型静态调用【数据库查询方法】实现:
$result = Staff::where('id','between',[1010,1015])->column('name'); //查看结果
dump($result);
}
}
查询结果:
//单字段返回一维索引数组,键名从0开始自增array(3) {
[0] => string(9) "欧阳峰"
[1] => string(9) "李云龙"
[2] => string(9) "楚云飞"}
二、模型对象调用:
$data = (new Staff)->where('id','between',[1010,1015])->column('id,name'); //查看结果
dump($data);
}
}
查看结果:
//二个字段时,默认取第一个字段名为键名,仍然返回一维数组array(3) {
[1010] => string(9) "欧阳峰"
[1011] => string(9) "李云龙"
[1012] => string(9) "楚云飞"}
我们再得瑟一下,把这个Index.php文件修改一下,看一下四个字段会返回什么?
$data = (new Staff)->where('id','between',[1010,1015])->column('id,name,age,salary'); //查看结果
dump($data);
}
}
查看结果:
//二个以上字段,会返回二维数组//同样,默认取第一个字段为元素键名array(3) {
[1010] => array(4) {
["id"] => int(1010)
["name"] => string(9) "欧阳峰"["age"] => int(28)
["salary"] => float(5400)
}
[1011] => array(4) {
["id"] => int(1011)
["name"] => string(9) "李云龙"["age"] => int(49)
["salary"] => float(10350)
}
[1012] => array(4) {
["id"] => int(1012)
["name"] => string(9) "楚云飞"["age"] => int(39)
["salary"] => float(5300)
}
}
我们再次手贱,修改一下Index.php,试一下自定义数组键名为:name的情况
//column()第二个参数设置了自定义的结果数组的键名:name
$data = (new Staff)->where('id','between',[1010,1015])
->column('id,name,age,salary','name'); //查看结果
dump($data);
}
}
现在查询结果是这种风格:
array(3) {
["欧阳峰"] => array(4) {
["name"] => string(9) "欧阳峰"["id"] => int(1010)
["age"] => int(28)
["salary"] => float(5400)
}
["李云龙"] => array(4) {
["name"] => string(9) "李云龙"["id"] => int(1011)
["age"] => int(49)
["salary"] => float(10350)
}
["楚云飞"] => array(4) {
["name"] => string(9) "楚云飞"["id"] => int(1012)
["age"] => int(39)
["salary"] => float(5300)
}
}
其实不管是多少字段,哪怕只有一个字段,也可以自定义结果中的数组键名。只要这个做键名的字段,在数据表中即可。
三、模型静态调用【模型方法】实现:
<?phpnamespace app\index\controller;//导入模型类use app\index\model\Staff;class Index { public function index(){ $result = Staff::all(['id'=>['between',[1010,1015]]]); foreach ($result as $data){ //getData()可以获取数据对象原始数据:$data属性值 dump($data -> getData());
}
}
}
查询结果与上面略有不同:
array(7) {
["id"] => int(1010)
["name"] => string(9) "欧阳峰"
["sex"] => int(1)
["age"] => int(28)
["salary"] => float(5400)
["dept"] => int(3)
["hiredate"] => string(10) "2013-09-22"}array(7) {
["id"] => int(1011)
["name"] => string(9) "李云龙"
["sex"] => int(1)
["age"] => int(49)
["salary"] => float(10350)
["dept"] => int(1)
["hiredate"] => string(10) "2005-10-20"}array(7) {
["id"] => int(1012)
["name"] => string(9) "楚云飞"
["sex"] => int(1)
["age"] => int(39)
["salary"] => float(5300)
["dept"] => int(1)
["hiredate"] => string(10) "2011-09-12"}
模型静态获取字段值,如果想与colume( )方法一样限制显示字段数量,可以使用闭包来实现。但是与value( )方法不同的是,不能自义定结果中的数组键名。
3. 总结:
在实际开发中,究竟应该用哪套方案,根据你的需求来,如果强调灵活性,显然,前二种方法更加方便。