ThinkPHP3.2基础教程(21)--模型-CURD操作-数据读取

  在ThinkPHP中读取数据的方式很多,通常分为读取数据、读取数据集和读取字段值。

  数据查询方法支持的连贯操作方法有:

连贯操作 作用 支持的参数类型
where 用于查询或者更新条件的定义 字符串、数组和对象
table 用于定义要操作的数据表名称 字符串和数组
alias 用于给当前数据表定义别名 字符串
field 用于定义要查询的字段(支持字段排除) 字符串和数组
order 用于对结果排序 字符串和数组
group 用于对查询的group支持 字符串
having 用于对查询的having支持 字符串
join 用于对查询的join支持 字符串和数组
union 用于对查询的union支持 字符串、数组和对象
distinct 用于查询的distinct支持 布尔值
lock 用于数据库的锁机制 布尔值
cache 用于查询缓存 支持多个参数
relation 用于关联查询(需要关联模型支持) 字符串
result 用于返回数据转换 字符串
scope 用于命名范围 字符串、数组
bind 用于数据绑定操作 数组
comment 用于SQL注释 字符串
fetchSql 不执行SQL而只是返回SQL 布尔值

  注意:某些情况下有些连贯操作是无效的,例如limit方法对find方法是无效的。

读取数据

  读取数据是指读取数据表中的一行数据(或者关联数据),主要通过find方法完成,例如:

$User = M("User"); // 实例化User对象
// 查找status值为1name值为think的用户数据
$data = $User->where(‘status=1 AND name="thinkphp"‘)->find();
dump($data);

  find方法查询数据的时候可以配合相关的连贯操作方法,其中最关键的则是where方法。

  如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。 如果上面的查询成功的话,会输出:

array (size=3)
  ‘name‘ => string ‘thinkphp‘ (length=8)
  ‘email‘ => string ‘[email protected]‘ (length=18)
  ‘status‘=> int 1

  即使满足条件的数据不止一个,find方法也只会返回第一条记录(可以通过order方法排序后查询)。

  还可以用data方法获取查询后的数据对象(查询成功后)

$User = M("User"); // 实例化User对象
// 查找status值为1name值为think的用户数据
$User->where(‘status=1 AND name="thinkphp"‘)->find();
dump($User->data());

读取数据集

  读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法,使用示例:

$User = M("User"); // 实例化User对象
// 查找status值为1的用户数据 以创建时间排序 返回10条数据
$list = $User->where(‘status=1‘)->order(‘create_time‘)->limit(10)->select();

  如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。

读取字段值

  读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。

  示例如下:

$User = M("User"); // 实例化User对象
// 获取ID为3的用户的昵称
$nickname = $User->where(‘id=3‘)->getField(‘nickname‘);

  默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。

  如果需要返回整个列的数据,可以用:

$User->getField(‘id‘,true); // 获取id数组
//返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值

  如果传入多个字段的话,默认返回一个关联数组:

$User = M("User"); // 实例化User对象
// 获取所有用户的ID和昵称列表
$list = $User->getField(‘id,nickname‘);
//两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组,以id的值为key,nickname字段值为value

  这样返回的list是一个数组,键名是用户的id字段的值,键值是用户的昵称nickname。

  如果传入多个字段的名称,例如:

$list = $User->getField(‘id,nickname,email‘);
//返回的数组格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value))是一个二维数组,//key还是id字段的值,但value是整行的array数组,类似于select()方法的结果遍历将id的值设为数组key

  返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。

  如果我们传入一个字符串分隔符:

$list = $User->getField(‘id,nickname,email‘,‘:‘);

  那么返回的结果就是一个数组,键名是用户id,键值是 nickname:email的输出字符串。

  getField方法还可以支持限制数量,例如:

$this->getField(‘id,name‘,5); // 限制返回5条记录
$this->getField(‘id‘,3); // 获取id数组 限制3条记录

  

时间: 2024-08-09 15:08:36

ThinkPHP3.2基础教程(21)--模型-CURD操作-数据读取的相关文章

ThinkPHP3.2基础教程(19)--模型-CURD操作-数据创建

ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法. CURD操作通常是可以和连贯操作配合完成的. 数据创建 在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

ThinkPHP的数据写入操作使用add方法,使用示例如下: $User = M("User"); // 实例化User对象 $data['name'] = 'ThinkPHP'; $data['email'] = '[email protected]'; $User->add($data); 如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作: add($data='',$options=array(),$replace=false) 其中add方法增加$repla

ThinkPHP3.2基础教程(6)--模型-字段定义

字段定义 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息. 字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是: 数据库名.模型名(小写).php dem

ThinkPHP3.2基础教程(36)--控制器-前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller{ //前置操作方法 public functio

ThinkPHP3.2基础教程(34)--URL操作

URL大小写 系统默认的规范是根据URL里面的模块名.控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法. 如果是Windows环境,无论大小写如何都能定位到,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况.但是系统本身提供了一个不区分URL大小写的解决方案,可以通过配置简单实现. 只要在项目配置中,增加: 'URL_CASE_INSENSITIVE' =>true 配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小

ThinkPHP3.2基础教程(37)--控制器-Action参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析. 参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块.控制器和操作名)和操作方法中的参数进行绑定. 要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置: 'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数 参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定. 按变量名绑定 默认的参数绑定方式是按照变量名进行绑定,例如,我们给Bl

ATOM基础教程一分屏操作(15)

简介 使用过vim作为编辑器开发的程序员对于分屏操作是非常熟悉的,当我们需要对比一个文件的多处位置进行编码时,分屏操作将大大提高我们的工作效率. 使用分屏操作 鼠标右键点击,出现如下图菜单 Split Up–在上方打开一个分屏 Split Down–在下方打开一个分屏 Split Left–在左方打开一个分屏 Split Right–在右方打开一个分屏 演示:

ThinkPHP3.2基础教程(33)--路由功能

利用路由功能,可以让你的URL地址更加简洁和优雅.ThinkPHP支持对模块的URL地址进行路由操作.路由功能是针对PATHINFO模式或者兼容URL而设计的,暂时不支持普通URL模式. 路由解析的最终结果通常是把URL地址解析到当前模块的某个控制器下的操作方法(不能跨模块路由),在特殊的情况下,也可以跳转到外部地址或者执行闭包函数. 注意:3.2版本的路由定义是针对模块定义的,所以路由是在模块配置文件中定义的,并且模块本身不能被路由(模块名的路由使用模块映射或者采用域名部署即可). 路由定义

linux基础教程---用户和组操作

用户和组操作 linux 操作系统之所以稳定.安全,与它的"用户和组"的管理是分不开的,我先来看下,现实生活中项目组中的简单管理: 给用户设置操作文件权限的工作非常繁琐,不要落实. linux 创建用户的时候,会考虑给用户创建一个组别 系统增减文件的时候,也会把一个文件划分为一个组别里边 这样系统管理员每天只需要关心用户是那个组别的即可,就可以知道该用户具体有什么文件 操作权限. linux用的用户和组的操作: 1.组操作(/etc/group) ① 增加组信息 groupadd(是连