ThinkPHP 定位查询

定位查询

ThinkPHP 支持对数据的定位查询:

  1. getN():取得查询结果中的某个位置的记录
  2. first():取得符合条件的第一条记录
  3. last():取得符合条件的最后一条记录

定位查询是内置于高级模型类(AdvModel)里的方法,是独立的方法且支持连贯操作。如果直接使用M或D实例化模型会提示:

Model:getN您所请求的方法不存在!

因此要使用定位查询需要加载高级模型类,可以有下面两种方法加载高级模型类:

1、使用动态模型切换 switchModel() 方法:

switchModel("Adv")

2、在用户模型里面继承高级模型类:

class UserModel extends AdvModel{ }

getN()

switchModel()

下面是使用 switchModel() 方法定位查询的例子:

public function read(){
    $Dao = M('User');
    $list = $Dao->switchModel('Adv')->where('uid > 0')->order('uid ASC')->getN(2);
    dump($list);
}

上例中用于取得 uid>0 的第3条记录。实际执行的 SQL 如下:

SELECT * FROM user WHERE uid > 0 ORDER BY uid ASC LIMIT 2,1 

因此 getN() 中的参数是 LIMIT 中的第一个参数(游标偏移量)。

AdvModel

在 Lib/Model/UserModel.class.php 文件中定义模型如下:

<?php
class UserModel extends AdvModel{

}
?>

由于不需要再模型类实现任何逻辑,因此可以是一个空模型。控制器中代码如下:

public function read(){
    $Dao = D('User');
    $list = $Dao->where('uid > 0')->order('uid ASC')->getN(2);
    dump($list);
}

执行的效果和使用 switchModel() 一致。

first()

first() 方法用于获取符合条件的第一条记录,是高级模型类里面的方法,可以参考 getN() 的用法。

下面是使用 switchModel() 方法定位查询的例子:

public function read(){
    $Dao = M('User');
    $list = $Dao->switchModel('Adv')->where('uid > 10')->order('uid ASC')->first();
}

该方法实际是执行 getN(0) 方法。

last()

last() 方法用于获取符合条件的最后一条记录,是高级模型类里面的方法,可以参考 getN() 的用法。

下面是使用 switchModel() 方法定位查询的例子:

public function read(){
    $Dao = M('User');
    $list = $Dao->switchModel('Adv')->where('uid > 10')->order('uid ASC')->last();
}

该方法实际是执行 getN(-1) 方法。

参考阅读

  1. MySQL 统计查询》系列教程
  2. ThinkPHP Where 条件
  3. ThinkPHP 连贯操作

本章节内容共分 8 部分:

  1. 1. ThinkPHP 查询数据 select(findAll) 方法
  2. 2. ThinkPHP find方法 查询一条数据记录
  3. 3. ThinkPHP getBy动态查询
  4. 4. ThinkPHP getField 方法获取某个字段的值或多个字段的索引数组
  5. 5. ThinkPHP 区间查询
  6. 6. ThinkPHP 统计查询
  7. 7. ThinkPHP 定位查询
  8. 8. ThinkPHP 原生SQL查询

评论于2016-12-18日起不再显示。

5idev.com(我爱开发网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程