ThinkPHP getByXXX()方法
这个问题是妹子问到的,最开始有点迷惑,因为我找不到这个函数定义的地方
所以上网搜索之: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()魔术方法的处理声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: Thinkphp3.2.2 行为扩展及demo实例
- 下一篇: ThinkPHP3.2 大致流程
