getField()是一个常用方法,我习惯用来获取带key的数组,方便数据整合。
使用第1个参数,传入一个字段名,获取某一个数据值,返回满足条件的数据表中的该字段的第一行的值:
$id = M("User")->getField('id')
使用第1个参数,传入2个字段名,获取key-value键值对:
$list = M("User")->getField('id,nickname');//两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组,以id的值为key,nickname字段值为value
使用第1个参数,传入3个及以上字段名,获取二维数组,以第一个字段名为key:
$list = $User->getField('id,nickname,email');
//返回的数组格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value))
使用2个参数:
$User->getField('id',true);// 获取id列每行的值
$this->getField('id,name',5); // 限制返回5条记录
$this->getField('id',3); // 获取id数组 限制3条记录
$list = $User->getField('id,nickname,email',':');//返回一个数组,键名是用户id,键值是 nickname:email的输出字符串
近期,我想要在thinkphp3的项目中使用getField()方法获取数据表某一列的所有内容:
$author_userid = M("user u")
->join(["inner join department p on p.id=u.department_id"])
->where(["p.id|p.pid"=>["in",$departments]])
->getField("u.id",true);
发现并没有返回我需要的内容:
![](https://img-blog.csdnimg.cn/img_convert/5fb165118c79dd1242bae4c75f6ea0be.png)
查看源代码,发现结果集的处理逻辑不支持“别名+字段名”的字段形式,我这里因为有关联表,传入的是“u.id”,这个字段名在结果集里并没有对应的内容:
![](https://img-blog.csdnimg.cn/img_convert/29ba9b0d488a5109d75415a0cd8c87c6.png)
优化方案:
在Model.class.php文件的974行前新增$field的处理代码就可以解决了:
$fieldArr = array_filter(explode(".",$field));
$field = $fieldArr[count($fieldArr)-1];
![](https://img-blog.csdnimg.cn/img_convert/a63eb6c1e3f85238c5da1e05f5935279.png)