学习查询构造器中的 sole() 方法

今天在翻译 翻译:Laravel 9.4 发布 的时候,新增了 soleValue() 方法。当我看见 sole() 这个方法时很陌生,我连听都没听说过它。在我们的 Laravel 8.5 和 Laravel 9.0 的文档中我也没有见到这个方法,写下这篇文章来记录一下。

`sole()` 方法是在 Laravel 8.23 版本添加的查询构造器方法,用来检索一条「唯一的」记录,并且它还会返回额外的断言。  

实践:

users 表有 2 条记录

id name email
1 ricky r1@me.com
2 ricky2 r1@me.com

我们要查询 namericky 的记录,确保它在表中只有一条记录。

Users::query()->where('name', 'like', '%ricky%')->sole();

因为表中有重复记录,sole() 方法会抛出一个 MultipleRecordsFoundException 异常,并断言数据库中重复的条数。

学习查询构造器中的 sole() 方法


再来查询一条不存在的记录试一下

Users::query()->where('name', 'like', '%coco%')->sole();

当查询记录不存在时,会抛出 ModelNotFoundException 异常

学习查询构造器中的 sole() 方法


只有当数据查询匹配,且在该表中是唯一一条记录时,才会返回一个 Model 对象。

Users::query()->where('name', 'ricky')->sole();
App\Models\User {#1070 ▼ `#connection: "mysql"
  #table: "users"
  #primaryKey: "id"
  ...
  #attributes: array:8 [] 
}

在我们要查询一条表中唯一的记录,例如 订单号 并且要保证它不能重复的时候,这很有用,帮我们省去了不必要的判断。

本作品采用《CC 协议》,转载必须注明作者和本文链接
悲观者永远正确,乐观者永远前行。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!