在看 TP框架的帮助文档的时候 看到一个很有意思的功能---字段的动态查询
官方是这么描述的
第一感觉 是 getBy后面的内容是字段名字 于是乎 就翻开Model类源码去看了看 果不其然..发现了一个 魔术函数 __CALL; __call 函数是 在用对象访问一个该类不存在的方法时调用的函数 系统会自动把方法名和 参数都传到 __call方法中
TP是这么定义的
仔细阅读代码 它提供了三种方式 如果都不符合直接报错提示
第一种
应该能看懂吧... _call把捕获的方法及其参数传递进来 判断 $method是否在允许的数组中,如果存在 将参数赋给$this->option变量 然后返回 $this对象 这是什么意思?
按照 __call函数 第一种解释就是 $Form->order('id desc') 执行之后 $this->option变量会变成 $this->option['order']='id desc', 然后 会返回$this对象 变成 $this->option['limit']='6', 然后会执行SQL去搜索数据
第二种就是
这个的意思就是 如果符合array('count','sum','min','max','avg'),true) 会将参数作为 sql语句的搜索字段 ,如果没有 默认就是 星 也就是 SELECT count(*)|sum(*)|min(*)|max(*)|avg(*) ********返回给数据 第三种就是咱们前面说的
这句代码会将 $User->getby* 中的*作为where 语句的参数来执行
假如说 代码为 $User->getByUsername("siren"); 那么 通过__call执行之后形成的语句就是 select * from table where username="siren"
就是这样..如果有错的地方 欢迎提出来.. |
|
来自: yliu277 > 《thinkphp》