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);
发现并没有返回我需要的内容:

查看源代码,发现结果集的处理逻辑不支持“别名+字段名”的字段形式,我这里因为有关联表,传入的是“u.id”,这个字段名在结果集里并没有对应的内容:

优化方案:
在Model.class.php文件的974行前新增$field的处理代码就可以解决了:
$fieldArr = array_filter(explode(".",$field));
$field = $fieldArr[count($fieldArr)-1];
