首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel 实现Eloquent模型分组查询返回每个分组数量 groupBy()

Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中一个字段并返回每个分组中数量...')- get(); ## 原始表达式# 有时候你可能需要查询中使用原始表达式。...- toArray(); 代码也不客气了,直接撂了挑子: 毛病出在这句身上: $sql = Data::raw('count(*) as value'); 我用了个Data(Model),返回是个...Builder对象,而此处却要一个字符串,所以改回了 $sql = DB::raw('count(*) as value'); 此时$sql是个string,至于有木有办法在此处用Model,慢慢研究吧...参考: Laravel Eloquent groupBy() AND also return count of each group 以上这篇Laravel 实现Eloquent模型分组查询返回每个分组数量

4.2K51

Laravel Eloquent 模型关联关系(下)

今天我们将在定义好模型关联基础上进行关联查询、插入和更新操作,看看如何借助模型关联提高代码可读性并提高编码效率。...性能上来说,渴求式加载更优,因为它会提前数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...,如果返回文章结果是列表的话,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以性能角度考虑不建议使用这种方式...空对象模型 如果外键字段 user_id 允许为空的话,当我们访问 Post 模型 author 属性时,默认返回为 null。...这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回也是一个正常 User 模型实例。

19.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

基于独立 Laravel Eloquent 组件编写 ORM 模型

ORM 及其实现模式 接下来我们来看看如何实现 MVC 模式中 M,即模型类。...模型类负责与数据库进行交互,这里模型指的是数据表模型,一个模型类对应一张数据表,数据表字段会映射为模型属性,我们可以通过模型类提供方法实现对应数据表记录增删改查,这样一来,我们就将原来面向过程数据库操作转化为面向对象风格编程...模型类全局可用(为了编写 Eloquent 模型类,如果只是使用 Laravel 提供数据库查询构建器功能,则不需要这些操作)。...$album = $post['album']; ... } } 这里模型类方法和关联查询都可以在 Eloquent 官方文档查询到,这里不详细介绍了,需要注意是,我们之前在视图模板中都是通过关联数组获取数据库查询结果...,这里为了避免重构视图层代码,直接在查询结果上调用 toArray 方法将其转化为数组格式。

1.9K10

通过 Laravel Eloquent 模型实现简单增删改查操作

下面我们将模型类定义时候还会强调这一点。 模型类定义 使用模型类之前,需要在数据库有对应数据表,因为模型类就是数据表在面向对象编程语言中映射。...数据库连接 Eloquent 模型类默认约定数据库连接是 config/database.php 中配置默认连接,正如我们在连接配置教程中所说那样,如果应用配置了多个数据库连接,可以通过 $connection...属性为模型类指定使用哪个连接: protected $connection = 'connection_name'; 查询数据 日常开发中,大部分操作都是数据库中查询数据,Eloquent 模型了为我们提供了很多方法帮助我们数据库中获取数据...,就等同于掌握了 Laravel所有数据库查询操作。...注:除获取单条记录之外,ELoquent 模型查询返回结果都是集合类,因此你可以在查询结果上调用集合类所有方法,还可以自定义模型对应集合类,详情请查看对应官方文档。

7.9K20

Laravel系列4.4】模型Eloquent ORM使用(二)

laravel/framework/src/Illuminate/Database/Eloquent/Collection.php 对象,然后这个对象里面有个 items 属性,是一个数组。...而我们在日常操作中,其实最习惯是使用数组那种形式操作,除开我们后面会讲直接配置入手来修改 PDO FETCH 属性之外,我们还可以用上面这个 map() 函数配合模型对象 attributesToArray...() 方法来将模型对象转换成数组格式。...这个没有什么多说,大家可以自己尝试一下。 模型调用查询构造器? 之前我们就一直在强调,原生查询 操作封装成 查询构造器 ,然后 查询构造器 进一步面向对象封装变成了 ORM 类型 模型 。...不过这里需要注意是,模型默认生成 QueryBuilder 是 llaravel/framework/src/Illuminate/Database/Eloquent/Builder.php 对象

2.8K20

Laravel5.7 Eloquent ORM快速入门详解

简介 Laravel 内置 Eloquent ORM 提供了一个美观、简单与数据库打交道 ActiveRecord 实现,每张数据表都对应一个与该表进行交互模型(Model),通过模型类,你可以对数据表进行查询...该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期格式: <?...默认情况下,所有的 Eloquent 模型使用应用配置中默认数据库连接,如果你想要为模型指定不同连接,可以通过 $connection 属性来设置: <?...Laravel 自带软删除功能就使用了全局作用域来数据库中拉出所有没有被删除模型。编写自定义全局作用域可以提供一种方便、简单方式来确保给定模型每个查询都有特定条件约束。...例如,你可能经常需要获取最受欢迎用户,要定义这样一个作用域,只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀。 作用域总是返回查询构建器实例: <?

15K41

3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过

Laravel提供 eloquent orm 使用面向对象方式封装了PDO数据库操作,使用起来非常方便,对于复杂SQL操作也游刃有余。...然而对于laravel而言,这些全过程都可以拼装,你只需要关注筛选和操作,剩下组装sql过程,laravel都帮你做好了。...Laravel 软删除功能就是利用此特性数据库中获取 “未删除”模型。 你可以编写你自己全局作用域,很简单、方便为每个模型查询都加上约束条件。看官方给出示例: ?...要将全局作用域分配给模型需要重写模型 booted 方法并使用 addGlobalScope 方法: ?...就是在对应 Eloquent 模型方法前添加 scope 前缀,在模型中构造如下作用域方法: ?

2.7K10

3分钟短文:Laravel模型集合跟基类真不一样,别混为一谈

引言 laravel在功能拆分上相当灵活,其中查询返回数据集,虽然继承了基类集合, 但是有一些特定方法和用法。很多小白在写时候,往往分不清到底是用哪个类哪个方法,导致凭空报错。...方法接收一个匿名函数,满足条件将被集合中剔除。...虽然eloquent collection继承了基类Collection特性,但是对于模型特性 有许多独特方法。比如 modelKeys() 返回所有集合模型primary key。...比如调用 find($id) 方法返回是根据模型实例primary id查找到模型对象。 这与原始集合方法都有着本质不同。...系统自带方法在复杂应用下不能满足多元化需求, 我们这时就需要手动自建集合类,用于特定操作。 比如在订单模型内,把所有已经支付订单进行求和返回

1K40

laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。...分享给大家供大家参考,具体如下: 1、连接数据库 laravel连接数据库配置文件位于config/database.php中,在其中connection字段中包含laravel所支持数据库配置信息...3.1、得到结果集 lavarel查询返回结果集合是StdClass,可以通过$res- name类似访问对象属性方式访问返回值。...Laravel内置Eloquent ORM提供了一种便捷方式帮助你组织数据库数据,每张数据表都对应一个与该表进行交互模型(Model),通过Model类,你可以对数据表进行查询、插入、更新、删除等操作...如果需要自定义表名,则需要重写$table变量来指定表名。 Eloquent默认主键为’id’,且该字段为自增int型,如果需要自定义主键,可以通过$primaryKey来指定。

13.3K51

Laravel基本数据库操作部分

[laravel] laravel数据库配置 找到程序目录结构下.env文件 配置基本数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog...DB_USERNAME=root DB_PASSWORD=root 修改完.env文件需要重启服务 [laravel] laravel数据库入门 控制器中导入DB数据库操作类,use DB 使用DB类静态方法...,array("1")); 获取到一个数组数组每一个结果是一个StdClass对象 <?...使用DB::table(),得到查询构造器对象,参数:表名 调用Builder对象get()方法,得到数组数据 例如:$users=DB::table("article")->get(); 查询构造器是链式调用...[laravel] Eloquent模型 使用Eloquent模型为表建立映射模型ORM,使用Artisan命令 make:model 模型名称 例如:php artisan make:model User

1.4K30

踩坑ThinkPHP5之模型对象返回数据集如何转为数组

防雷——tp5模型操作数据库 各位小伙伴们大家好,冷月今天在做项目的过程中呢,遇到了一个坑就是用tp5模型操作数据库时,返回是数据集而不是直接数组。于是冷月就想办法如何将数据集转为数组。...写下这篇博文,防止大家遇到这个坑时可以更快解决。 首先让我们来看一下这个坑 冷月在控制器中定义了一个方法来操作模型,如下图: ? 然后,返回是数据集而不是可以直接操作数组: ?...然后我试着利用toArray()这个方法看看能不能转为数组: ?...再查阅资料和看tp5使用手册后,冷月发现将数据库配置database.php文件里resultset_type改为collection后,就可以解决这个问题。 ?...然后,同样代码成功返回想要数组: ? 最后啰嗦: 只要思想不滑坡,办法总比问题多 快去学习去~ 勤加练习,早日收获自己offer!

1.6K20

Laravel学习记录--Model

Laravel 自带 软删除功能 就利用全局作用域数据库中提取「未删除」模型。编写自定义全局作用域可以提供一个方便、简单方法来确保给定模型每个查询都受到一定约束。...渴求式加载指定字段 带条件约束渴求式加载 懒惰式渴求式加载 当以属性方式访问Eloquent关联关系时候,关联关系数据是[懒惰式加载]因为都是用到时候才执行查询,这就意味着要多次对数据库进行查询才能返回需要结果...Laravel中允许你自定义中间表模型需要注意是中间表模型与普通模型不一样 普通模型继承自Illuminate\Database\Eloquent\Model,而中间表模型继承自Illuminate...则查询是关联对象本身,若为false,查询是关联对象与父模型对应关系。...,不同是save接收是一个完整Eloquent实例,而creare接收是一个纯数组需要注意是使用create方法需要设置$fillable允许批量添加值。

13.4K20

Laravel 5.2 文档 数据库 —— 起步介绍

1、简介 Laravel连接多种数据库以及对数据库进行查询变得非常简单,不论使用原生 SQL、还是查询构建器,还是 Eloquent ORM。...默认情况下,Laravel 示例环境配置已经为 Laravel Homestead 做好了设置,当然,你也可以按照需要为本地数据库修改该配置。...读/写连接 有时候你希望使用一个数据库连接查询,另一个数据库连接做插入、更新和删除,Laravel 使得这件事情轻而易举,不管你用是原生 SQL,还是查询构建器,还是 Eloquent ORM,合适连接总是会被使用...如果我们想要覆盖主数组配置,只需要将相应配置项放到read和write数组中即可。在本例中,192.168.1.1将被用作“读”连接,而192.168.1.2将被用作“写”连接。...select方法以数组形式返回结果集,数组每一个结果都是一个PHP StdClass对象,从而允许你像下面这样访问结果值: foreach ($users as $user) { echo $

3.2K71

Laravel 5.0 之 Eloquent 属性转换

本文译自 Matt Stauffer 系列文章. ---- 之前完全忘了要把这个 Laravel 5 系列博客写完,不过最近看到了一篇关于属性转换简介 Laravel 5 Eloquent Attribute...属性转换是 Eloquent 模型一个功能特性,这个特性让我们可以赋予 Eloquent 模型某个属性转换为一个特定数据类型。...这意味着假如你数据是以特定格式存储在数据库中,而你在使用时需要是另外一种格式,现在你可以配置 Eloquent 模型自动完成两种格式之间转换工作。 为什么要这样做?...它是如何实现? 要应用属性转换这个功能,你需要在你模型中添加一个 protected $casts 数组变量。...这个数组变量 $casts 作用就是告诉 Eloquent:“每次当我访问这个模型 is_admin 属性时候,返回一个类型为 boolean 值给我”。

2.1K80

Laravel Eloquent ORM 实现查询表中指定字段

在使用Laravel ORMModel方法find, get, first方法获取数据对象返回数据对象attributes属性数组里会包含数据表中所有的字段对应键值关系, 那么如何在ORM查询时只返回数据表中指定字段数据呢...很多时候,文档上没有写明用法需要我们去看源码来探究,下面我们就来看一下这三个方法实现。...由于ORM依赖了QueryBuilder来实现查询, 在QueryBuilder源码里通过查看get,first方法实现可以到,他们都可以接收一个数组参数来指定要查询字段: find方法实现是在...ORM方法查询返回指定字段可通过如下三种方法来实现 $data = ModelA::find($id, ['column1', 'column2']); $data = ModelA::first...以上这篇Laravel Eloquent ORM 实现查询表中指定字段就是小编分享给大家全部内容了,希望能给大家一个参考。

3.1K21

深入理解 Laravel Eloquent(三)——模型间关系(关联)

所谓 “对象”,就是本文所说模型(Model)”;对象关系映射,即为模型间关系。...... account_id account: id ... ... user_id 假设我们需要在 User 模型查询对应 Account 表信息,那么代码应该是这样。...跟大家说一个诀窍,`var_dump()` 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐对象/数组展开了。...重要技巧:关系预载入 你也许已经发现了,在一对一关系中,如果我们需要一次性查询出10个 User 并带上对应 Account 的话,那么就需要给数据库打 1 + 10 条 SQL,这样性能是很差。...---- 至此,深入理解 Laravel Eloquent 系列文章到此结束。推荐继续了解 软删除 、转换成数组/JSON。 END

2.6K30

laravel 模型Eloquent ORM 查询

up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大 模型 Model 介绍 Laravel Eloquent ORM 提供了一个漂亮、简洁 ActiveRecord...每个数据库表都有一个对应模型」用来与该表交互。你可以通过模型查询数据表中数据,以及在数据表中插入新记录。 在开始之前,请确保在 config/database.php 中配置数据库连接。...更多关于数据库配置信息,请查看 文档。 模型 就是把数据库表映射到模型类,用面向对象方式来操作数据库,既然是面向对象自然就可以继承了可以方便复用。...laravel Model 使用先进 Eloquent ORM 但也有优缺点 优点是数据库操作变简单安全 缺点也明显数据库操作变缓慢笨重 Eloquent ORM 作为 laravel 中亮点...和使用了 DB 取出来数据一样是都是一个 Collection 集合,不一样是 DB 取出来数组,Model 取出来是一个类,需要一层一层剥开点到 attributes 我们才能看到数据

4.4K10

3分钟短文:Laravel 软删除说到模型作用域概念

我们软删除使用,再顺便说一说模型作用域概念。 代码时间 常规删除操作分两步进行,一步是把数据数据库中查询出来,使用laravel模型方法, 则返回是一个模型对象。...第二步,调用模型对象delete方法。...ID数组条目: Contact::destroy([1, 5, 7]); 当然了,delete方法只是链式调用一个方法,我们通过查询构造器过滤后数据集, 都可以调用该方法将其删除: Contact...如果是想软删除条目那样,默认把所有的查询都追加 自定义查询条件,就需要我们上面说全局作用域了。...写在最后 本文laravel模型写操作删除动作,讲到了软删除概念。进而引申出来本地作用域和全局作用域使用。软删除几乎贯穿了我们应用始终,需要大家勤学苦练。

1.3K30

laravel5.6 框架操作数据 Eloquent ORM用法示例

本文实例讲述了laravel5.6 框架操作数据 Eloquent ORM用法。分享给大家供大家参考,具体如下: 建立Users模型 <?...= 'mysql'; //自动维护时间戳 默认是'true' public $timestamps=true; //返回当前时间时间戳,进入数据库,输出时,可以输出格式化好时间 protected...function getDateFormat() { return time(); } //设置之后,返回就是数据表中时间戳 protected function asDateTime...($value) { return $value; } } 引用Users模型 use App\Model\Eloquent\Admin\Users; ORM 查 //all() 查询所有数据...操作数据查询构建器 更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql

2K30
领券