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()魔术方法的处理
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。