A-A+

ThinkPHP中getBy__、getFieldBy、top

2015年03月06日 thinkphp开发 暂无评论 阅读 2,515 次

ThinkPHP中getBy__、getFieldBy、top的用法

一、ThinkPHP getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录。

根据用户名(username)查询对应的用户资料记录:

public function chekUser(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");
    // 查询数据
    $user = $Dao->getByUsername('Admin');

    if($list){
        echo '用户名存在';
    }else{
        echo '用户名不存在';
    }
}

方法中传入的参数是查询的字段对应的值,上面例子执行的 SQL 语句为:

SELECT * FROM user WHERE username = 'Admin' LIMIT 1

请注意,在getBy之后紧跟着的字段名称,首字母必须大写。对于如 user_name 这样的字段名称,以驼峰法自动识别下划线,即:

$user = $Dao->getByUserName('Admin');

实际使用中可以灵活根据查询的字段名来定义 getBy 放入,如:getByEmail、getByTitle、getById 等。

(2) getFieldBy
getFieldBy和getBy相类似,但getFieldBy不仅获取到某个字段指定值的数据,还可以根据某个字段值得到另一个字段的值。假设根据admin@uphtm.com查询结果,得到该用户的id,那么可以动态表示为getFieldByEmai("admin@uphtm.com","id"),如以下代码所示。

  1. <?php
  2. public function index(){
  3. $User=new AdvModel("User");
  4. $rows=$User->getFieldByUserEmail("admin@uphtm.com","id");
  5. dump($rows) ;
  6. }
  7. ?>

上述代码转换后的SQL 语句如下所示。

 

SELECT 'id' FROM 'tpk_user' WHERE ('user_email' = 'admin@uphtm.com' ) LIMIT 1

(3) top
getN操作方法用于跳过记录,而top操作方法用于包含记录。top 操作方法是一个动态方法,不需要传递参数,它的表示方式直观好记,例如需要获取前5个用户,那么就表示为top5()。严格意义上数字5并不是一个合格的方法命名规则,但在动态操作中是被允许的。
动态查询只有top操作方法需要使用AdvModel高级模型,其他两个并不需要。

标签:

给我留言

Copyright © web前端技术开发个人博客 保留所有权利  京ICP备14060653号 Theme  Ality

用户登录