网站首页 > 开源技术 正文
引言
本期继续我们的laravel学习,主要说一说laravel使用eloquent orm 模型 读取数据库条目的几个常用方法。
因为设计的原因,laravel支持的链式操作 本质上方法的返回值归属于不同的类。 所以在使用方法之前务必明确调用的是哪个类的那个方法,返回的是什么类型的数据。
学习时间
让我们从最简单的例子开始,就是获取数据库表内所有的条目,返回一个集合。使用下面的方法即可实现:
$allContacts = Contact::all();
通过查看源码我们知道all方法,其实是调用了 get 方法并默认返回所有字段。 我们为这个查询添加条件,一遍精简输出内容:
$vipContacts = Contact::where('vip', true)->get();
筛选出所有vip的合约。eloquent门面为我们提供了很多好用的链式操作方法, 在query builder筛选出合适的条目后,返回一个eloquent collection,或者是一个 基类的collection对象,可以直接使用集合的方法操作数据集:
$newestContacts = Contact::orderBy('created_at', 'desc')->take(10)->get();
不过大家需要注意的是,orderBy take 这些方法,都是集合的操作,也就是说 在执行之前,数据库查询是全量的,这对于数据库服务器和web服务器不再一台主机的情况, 网络传输量是个不小的考验。
所以我们推荐使用where语句进行数据库SQL操作,将合适的结果集返回,这样精简了数据库负载, 再者,使用集合的操作方法,对结果集进行进一步的格式化,效率会高的多。
对于web应用,可以简单地使用前几期我们使用的 firstOrFail 方法,便捷地去除第一个条目, 或者找不到的时候,抛出异常。
public function show($contactId)
{
return view('contacts.show')->with('contact', Contact::findOrFail($contactId));
}
其中,first(), firstOrFail(), find(), findOrFail(),都是用于返回单个条目,单条记录的方法。
如果返回的是多个条目,就不能用这些方法了:
$vipContacts = Contact::where('vip', true)->get();
有一个标准的方法 get,就是返回一个 eloquent collection 对象。如果你的数据库条目固定, 且是少量数据,那么直接用
$contacts = Contact::all();
把记录全部拿出来就好了。如果数据量有点大,要分批次将结果返回, 但是又不知道总量多少,则可以使用分块返回的方式,手动指定每次查询的条目数, 依次将结果集拿出来:
Contact::chunk(100, function ($contacts) {
foreach ($contacts as $contact) {}
});
只需调用chunk方法,就能帮你办到。
顺带再说一下聚合函数,使用关系型数据库很大的因素就是其拉取关系型数据很高效, 因此也内置了很多聚合函数用于数据聚合操作。
比如常用的数据统计,计数,求平均,求和等等等等,laravel调用起来的方法也极为简单, 像下面这样:
$countVips = Contact::where('vip', true)->count();
$sumVotes = Contact::sum('votes');
$averageSkill = User::avg('skill_level');
当然了,现实场景一般都要有查询约束条件,我们只用链式调用, 在完成约束后,使用聚合函数统计即可。
写在最后
本文主要讲了数据库查询相关的内容,包括获取全量数据,获取单条数据, 分块拉取数据,以及聚合函数等,这些常规操作集合上期讲的查询约束项, 基本上可以涵盖编程中的大多数需求了。
Happy coding :-)
我是@程序员小助手,持续分享编程知识,欢迎关注。
猜你喜欢
- 2024-12-14 ES的searchAfter使用详解
- 2024-12-14 Spring Boot Data Elasticsearch 通用工具类
- 2024-12-14 SpringBoot+Vue+ES 实现仿百度全文搜索
- 2024-12-14 Spring Data JPA——多表设计、一对多、多对多、多表查询
- 2024-12-14 一文读懂SpringBoot整合Elasticsearch
- 2024-12-14 ElasticSearchRepository和ElasticSearchTemplate的使用
- 2024-12-14 Elasticsearch 在地理信息空间索引的探索和演进
- 2024-12-14 Java微服务-一套前后台全部开源的H5商城送给大家(全部开源)
- 2024-12-14 android使用greendao来保存数据
- 2024-12-14 纯干货,Spring-data-jpa详解,全方位介绍
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)