学习查询构造器中的 sole() 方法
今天在翻译 翻译:Laravel 9.4 发布 的时候,新增了 soleValue() 方法。当我看见 sole() 这个方法时很陌生,我连听都没听说过它。在我们的 Laravel 8.5 和 Laravel 9.0 的文档中我也没有见到这个方法,写下这篇文章来记录一下。
`sole()` 方法是在 Laravel 8.23 版本添加的查询构造器方法,用来检索一条「唯一的」记录,并且它还会返回额外的断言。
实践:
现 users 表有 2 条记录
我们要查询 name 像 ricky 的记录,确保它在表中只有一条记录。
Users::query()->where('name', 'like', '%ricky%')->sole();
因为表中有重复记录,sole() 方法会抛出一个 MultipleRecordsFoundException 异常,并断言数据库中重复的条数。

再来查询一条不存在的记录试一下
Users::query()->where('name', 'like', '%coco%')->sole();
当查询记录不存在时,会抛出 ModelNotFoundException 异常

只有当数据查询匹配,且在该表中是唯一一条记录时,才会返回一个 Model 对象。
Users::query()->where('name', 'ricky')->sole();
App\Models\User {#1070 ▼ `#connection: "mysql"
#table: "users"
#primaryKey: "id"
...
#attributes: array:8 [▶]
}
在我们要查询一条表中唯一的记录,例如 订单号 并且要保证它不能重复的时候,这很有用,帮我们省去了不必要的判断。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: