这个问题是妹子问到的,最开始有点迷惑,因为我找不到这个函数定义的地方
所以上网搜索之:getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录。
所以移步Model类,看看是否有__call()方法作祟(果然确实是有的,豁然开朗啊):
model类的__call()方法如下:
/**
* 利用__call方法实现一些特殊的Model方法
* @access public
* @param string $method 方法名称
* @param array $args 调用参数
* @return mixed
*/
public function __call($method,$args) {
if(in_array(strtolower($method),$this->methods,true)) {
// 连贯操作的实现
$this->options[strtolower($method)] = $args[0];
return $this;
}elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){
// 统计查询的实现
$field = isset($args[0])?$args[0]:'*';
return $this->getField(strtoupper($method).'('.$field.') AS tp_'.$method);
}elseif(<strong>strtolower(substr($method,0,5))</strong>=='<strong>getby</strong>') {
// 根据某个字段获取记录
$field = parse_name(substr($method,5));
$where[$field] = $args[0];
return <strong>$this->where($where)->find()</strong>;
}elseif(strtolower(substr($method,0,10))=='getfieldby') {
// 根据某个字段获取记录的某个值
$name = parse_name(substr($method,10));
$where[$name] =$args[0];
return $this->where($where)->getField($args[1]);
}elseif(isset($this->_scope[$method])){// 命名范围的单独调用支持
return $this->scope($method,$args[0]);
}else{
throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
return;
}
}
如上加粗的部分,就是这个getByXXX()魔术方法的处理