php 查询方法all,获取多条:all静态方法

查询多条数据:all( )方法all方法与前节课学习的get方法都是静态方法,可用模型类直接访问

2. 源码:/**

* 查找所有记录

* @access public

* @param mixed        $data  主键列表或者查询条件(闭包)

* @param array|string $with  关联预查询

* @param bool         $cache 是否缓存

* @return static[]|false

* @throws exception\DbException

*/

public static function all($data = null, $with = [], $cache = false)

{  $query = static::parseQuery($data, $with, $cache);  return $query->select($data);

}all方法源码与get源码几乎一样,仅是最后调用的查询方法不同:select($data)

3. 参数与返回值:参数:序号参数说明1数字/字符串主键列表

2查询表达式支持所有查询表达式

3闭包函数支持更多高级查询语法返回值:数据集对象。

4. 实例演示我们仍以tp5_staff数据表为例

一、任务1:获取tp5_staff表中:id等于1009和1010的记录控制器:Index.php查询条件以字符串方式给出:’1009,1010‘<?phpnamespace  app\index\controller;//导入模型类use app\index\model\Staff;class Index {  public function index(){

//1.执行查询,返回数据对象数组  $result = Staff::all('1009,1010');

//2.遍历该数据对象数组:$result  //$data既是循环变量,也是其中一个数据对象  foreach ($result as $data){          //getData()可以获取数据对象原始数据:$data属性值  dump($data -> getData());

}

}

}all( ) 方法的主键列表:还可以用数组表示//1.执行查询,返回数据对象数组  $result = Staff::all([1009,1010]);以上查询方法,返回的SQL查询语句都是一样的:SELECT * FROM `tp5_staff` WHERE `id` IN (1009,1010) ;

二、任务2:查询表中年龄age大于30,并且工资salary大于800的员工信息显然,对于这样需求,上面方法无能为力,只能通过构造查询表达式来解决控制器:Index.php<?phpnamespace  app\index\controller;//导入模型类use app\index\model\Staff;class Index {  public function index(){

//1.构造查询表达式  $map['age'] = ['>',30];      $map['salary'] = ['>',8000];      //2.执行查询,返回数据对象数组  $result = Staff::all($map);

//3.遍历该数据对象数组:$result  //$data既是循环变量,也是其中一个数据对象  foreach ($result as $data){      //getData()可以获取数据对象原始数据:$data属性值  dump($data -> getData());

}

}

}对应的SQL语句:SELECT * FROM `tp5_staff` WHERE `age` > 30 AND `salary` > 8000;查询结果如下:

c732078f75e1c6b236334140bd4afcfe.png

三、任务3:在任务2的基础上(age>30 AND salary>8000),我们又提出了三个需求:按工资排序,只输出工资最高的3个人的编号,姓名,年龄,工资信息。根据需求,查询表达式已无法完成,必须借助连贯方法,就这要用到:闭包查询控制器:Index.php<?phpnamespace  app\index\controller;//导入模型类use app\index\model\Staff;class Index {  public function index(){

//1.构造闭包函数  $closure = function ($query){          //1.设置字段别名  $field['id'] = '编号';          $field['name'] = '姓名';          $field['age'] = '年龄';          $field['salary'] = '工资';          //2.设置查询表达式  $map['age'] = ['>',30];          $map['salary'] = ['>',8000];

//3.执行查询  $query -> field($field)  //限制显示字段 -> where($map)    //过滤查询结果 -> order('salary desc')  //按salary字段降序输出 -> limit(3);   //限制输出数量  };      //2.执行闭包查询,返回数据对象数组  $result = Staff::all($closure);

//3.遍历该数据对象数组:$result  //$data既是循环变量,也是其中一个数据对象  foreach ($result as $data){      //getData()可以获取数据对象原始数据:$data属性值  dump($data -> getData());

}

}

}查询对应的SQL语句:SELECT `id` AS `编号`,`name` AS `姓名`,`age` AS `年龄`,`salary` AS `工资` FROM `tp5_staff` WHERE `age` > 30 AND `salary` > 8000 ORDER BY salary desc LIMIT 3浏览器查看:array(4) {

["编号"] => int(1006)

["姓名"] => string(9) "西门庆"

["年龄"] => int(90)

["工资"] => float(20301)

}array(4) {

["编号"] => int(1002)

["姓名"] => string(6) "帮主"

["年龄"] => int(255)

["工资"] => float(12345)

}array(4) {

["编号"] => int(1028)

["姓名"] => string(6) "方方"

["年龄"] => int(90)

["工资"] => float(10877)

}数据库查询结果:SQLPRO for MySQL工具

1fd252d43a88d40232d2de2156090e2f.png

5. 总结:all( )方法与查询类的select方法的功能是一样的,你完成可以认为这是省去了选择数据表的select操作。其实我们将闭包查询中的all( ),换成:select( )方法,查询结果是一样的$result = Staff::select($closure);

与$result = Staff::all($closure);

完全是等价的!为什么会是这样的呢?Model类中并没有select静态方法呀!这就是__callStatic( )魔术方法的魔力发挥了作用!记不清的同学,请复习OOP编程总结章节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[译文]过犹不及,别再在编程中高射炮打蚊子

原文链接&#xff1a;Anyway,stop recommending bazookas to kill flies in programming. 众成翻译地址&#xff1a;过犹不及&#xff0c;别再在编程中高射炮打蚊子 译者注&#xff1a;翻译这篇吐槽的文章&#xff0c;主要是为了自省~日常工作中确实会犯类似的错误&#xff0…

Java中的for循环

上一章呢我们学习了一下java中的while循环和do while循环 现在我们来了解一下另外一种循环 for循环 for循环是编程语言中一种开界的循环语句&#xff0c;而循环语句 由循环体及循环的终止条件两部分组成&#xff0c;for循环其在各种编程语言中的实现与表达有所出入&#xff0…

SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看

依赖&#xff1a; <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> <…

matlab期末复习资料,MATLAB期末复习习题及答案

MATLAB期末复习习题及答案13&#xff0c; ysin(x)&#xff0c;x从0到2 &#xff0c; x0.02 &#xff0c;求y的最大值、最小值、均值和标准差。(应用max,min,mean,std) 14&#xff0c; 参照课件中例题的方法&#xff0c;计算表达式z 10x3 y5e xcontour, hold on, quiver)15&…

多核可扩展计数器

到处都需要计数器&#xff0c;例如&#xff0c;查找应用程序的关键KPI&#xff0c;应用程序的负载&#xff0c;服务的请求总数&#xff0c;用于查找应用程序吞吐量的一些KPI等。 由于所有这些需求&#xff0c;并发复杂性也增加了&#xff0c;这使这个问题变得有趣。 如何实现…

三年前端,面试思考(二)

为什么还有&#xff08;二&#xff09; 没有想到上一篇 《三年前端&#xff0c;面试思考》 有这么多前端同学看到。 在评论区也有很多鼓励和质疑的声音&#xff0c;而且群里面交流的同学两天就达到了700人。 群里有同学问了很多问题&#xff0c;同时希望我再分享一些面试技巧…

51单片机auxr寄存器_MCS-51单片机有几个工作寄存器

工作寄存器有4组&#xff0c;每组都是8个工作寄存器R0~R7&#xff0c;通过PSW中的RS1、RS0两位来选择使用哪一组&#xff0c;如果不选&#xff0c;默认是选择第0组。RS1RS0组合为00时&#xff0c;选中第0组工作寄存器&#xff0c;R0~R7地址为00H~07H;RS1RS0组合为01时&#xff…

matlab中quat2angle,RPY_Euler_Quaternion_AngleAxis角度转化:Matlab、Python、Halc

RPY_Euler_Quaternion_AngleAxis角度转化&#xff1a;Matlab、Python、HalcRPY_Euler_Quaternion_AngleAxis角度转化&#xff1a;Matlab、Python、Halcon版本UR协作机器人和Franka机器人导出的位姿为angleVector&#xff0c;三个量表示&#xff0c;在Matlab中angleVector是四个…

基本注射/资格赛,范围

这是上周解决的DI / CDI基础知识的延续-在本文中&#xff0c;我将讨论基础注入&#xff0c;限定词和范围。 在上一个主题中&#xff0c;我们提供了有关DI / CDI概念的大量信息&#xff0c;我们还讨论了如何使用注释加载这些bean或类-这构成了对象的组成并创建了关于如何进行采…

100*100的 canvas 占多少内存?

题目 100*100的 canvas 占多少内存&#xff1f; 在 三年前端&#xff0c;面试思考 中提到了一个题目&#xff0c;非常有新意&#xff0c;这里分享一下当时面试的思考过程。 解题思路 其实真正的答案是多少我并不清楚&#xff0c;面试过程中面试官也不期待一个准确的答案&am…

1t硬盘怎么分区最好_这下尴尬了,电脑硬盘分区常见误区,移动硬盘分区方法...

大家买了新电脑硬盘要不要分区呢&#xff1f;像以往咱们买了新电脑一般会分4个区&#xff0c;C、D、E、F&#xff0c;方便更合理的分类使用&#xff0c;比如把工作放为D盘&#xff0c;娱乐影音放为E盘&#xff0c;游戏放为F盘&#xff0c;C盘为系统盘。不过渐渐地发现&#xff…

用Spring长轮询Tomcat

就像喜剧演员弗兰基 豪威尔 &#xff08; Frankie Howerd&#xff09;所说的“哦&#xff0c;小姐小姐” &#xff0c;但足够多的英国影射和双重诱惑&#xff0c;因为长轮询雄猫对隔壁的闷气不是某种性偏见&#xff0c;这是一种技术&#xff08;或更像是一种骇客&#xff09;由…

exchange 删除邮件

一 批量删除特定主题的邮件1.1 批量删除所有数据库中特定主题的邮件1) 群发了几封主题为“backup”的邮件&#xff1b; 2) 当前操作账号需要满足如下需求&#xff1a; a)该账号需属于Exchange Server 管理员角色以及源服务器和目标服务器的本地 Administrator组&#xff1b; b)…

js点击取消按钮关闭当前弹框_UI设计中“取消按钮”的分析详解

按钮&#xff0c;无论是在 Web 还是 App 上都被广泛地使用&#xff0c;而很少有设计师会注意到按钮当中的细节&#xff0c;导致在设计过程中出现一些低级的错误&#xff0c;使得用户在完成任务的过程中产生阻碍&#xff0c;无法顺利达成目的。在许多优秀的产品中&#xff0c;关…

MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...

windows程序设计——飞机大战笔记(单文档文件登陆界面)//2015/07/21/by xbw////环境 VS 2013飞机大战做的差不多了&#xff0c;闲来无事加点高大上的东西&#xff0c;关于单文档的登陆界面&#xff1b;&#xff1b;&#xff1b;界面有点丑&#xff0c;但是足够账号登陆了&#…

吸收Mockito的流利度

我最近发现自己编写了一些代码来集成两个不同的平台。 这些系统之一是基于Java的系统&#xff0c;而另一个虽然不是用Java编写的&#xff0c;却提供了Java API。 我将这些系统分别称为Foo和Bar。 在编写一行代码之前就很明显了&#xff0c;但是&#xff0c;测试最终的适配器将…

软件工程第三次作业

题目要求 最大连续子数组和&#xff08;最大子段和&#xff09; 问题&#xff1a; 给定n个整数&#xff08;可能为负数&#xff09;组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]a[i1]…a[j]的子段和的最大值。 当所给的整数均为负数时定义子段和为0&#xff0c;依此定义&a…

使用HTML5 IndexDB存储图像和文件

使用IndexedDB存储图像和文件 有一天&#xff0c;我们写了关于如何在localStorage中保存图像和文件的文章&#xff0c;它是关于我们今天可用的实用主义。 然而&#xff0c;localStorage有一些性能影响 - 我们将在稍后的博客中讨论这个问题 - 并且未来期望的方法是使用IndexedD…

Gitlab 项目上传

一&#xff0c;登陆gitab&#xff0c;新建reject Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public, Private : 仓库权限&#xff08;公开共享&#xff0c;私有或指定合作者&#xff09; Initialize this repository with a README: 添加一个README.md gitig…

stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图

在当今激烈竞争的电池供电市场中&#xff0c;由于成本指标限制&#xff0c;设计人员常常使用双面板。尽管多层板(4层、6层及8层)方案在尺寸、噪声和性能方面具有明显 优势&#xff0c;成本压力却促使工程师们重新考虑其布线策略&#xff0c;采用双面板。在本文中&#xff0c;我…