Eloquent 集合 | Eloquent ORM |《Laravel 8 中文文档 8.x》| Laravel China 社区


本站和网页 https://learnku.com/docs/laravel/8.x/eloquent-collections/9408#available-methods 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Eloquent 集合 | Eloquent ORM |《Laravel 8 中文文档 8.x》| Laravel China 社区
Laravel
话题列表
社区 Wiki
优质外文
招聘求职
Laravel 实战教程
社区文档
登录
注册
Laravel 8 中文文档
展开或关闭
前言
发行说明
升级说明
贡献导引
入门指南
安装
配置信息
文件夹结构
Homestead
Valet
部署
核心架构
请求周期
服务容器
服务提供者
Facades
Contracts
基础功能
路由
中间件
CSRF 保护
控制器
请求
响应
视图
生成 URL
Session
表单验证
错误
日志
前端开发
Blade 模板
本地化
前端脚手架
编辑资源 Mix
安全相关
用户认证
用户授权
Email 认证
加密解密
哈希
重置密码
综合话题
Artisan 命令行
广播系统
缓存系统
集合
事件系统
文件存储
辅助函数
HTTP 客户端
邮件发送
消息通知
扩展包开发
队列
任务调度
数据库
快速入门
查询构造器
分页
数据库迁移
数据填充
Redis
Eloquent ORM
快速入门
模型关联
Eloquent 集合
修改器
API 资源
序列化
测试相关
快速入门
HTTP 测试
命令行测试
Dusk 浏览器测试
数据库测试
测试模拟器 Mocking
官方扩展包
Envoy 部署工具
Horizon 队列管理
Passport OAuth 认证
Sanctum 认证
Scout 全文搜索
Socialite 社会化登录
Telescope 调试工具
Laravel Sail
Laravel
首页
Laravel
Go
PHP
Vue.js
Python
Java
MySQL
Rust
LK
Elasticsearch
F2E 前端
Server
程序员
Database
DevTools
Computer Science
手机开发
AdonisJS
社区
Wiki
教程
Laravel 实战教程首页
《L01 Laravel 教程 - Web 开发实战入门》
《L02 Laravel 教程 - Web 开发实战进阶》
《L03 Laravel 教程 - 实战构架 API 服务器》
《L04 Laravel 教程 - 微信小程序从零到发布》
《L05 Laravel 教程 - 电商实战》
《L06 Laravel 教程 - 电商进阶》
《LX1 Laravel / PHP 扩展包视频教程》
《LX2 PHP 扩展包实战教程 - 从入门到发布》
《L07 Laravel 教程 - Laravel TDD 测试实战》
《LX3 Laravel 性能优化入门》
《LX4 Laravel / PHP 五分钟视频》
文档
社区文档首页
《Laravel 中文文档》
《Laravel 速查表》
《PHP 代码简洁之道》
《Laravel 编码技巧》
《Dcat Admin 中文文档》
《Laravel Nova 中文文档》
《Lumen 中文文档》
《Dingo API 中文文档》
《 Laravel 项目开发规范》
《构建 Laravel 开发环境》
登录
注册
微信登录
提交改进
Eloquent 集合
8.x
9.x
8.5
8.x
7.x
6.x
5.8
5.7
5.6
5.5
5.4
5.3
5.2
5.1
Laravel 8 中文文档
未匹配的标注
本文档最新版为 9.x,旧版本可能放弃维护,推荐阅读最新版!
Eloquent: 集合
简介
可用的方法
自定义集合
简介
Eloquent 返回的所有结果集都是 Illuminate\Database\Eloquent\Collection 对象的实例,包括通过 get方法检索或通过访问关联关系获取到的结果。 Eloquent 的集合对象继承了 Laravel 的 Base Collection,因此它自然也继承了数十种能优雅地处理 Eloquent 模型底层数组的方法。
而且,所有的集合都可以作为迭代器,你可以像遍历简单的 PHP 数组一样来遍历它们:
$users = App\Models\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
不过,集合比数组更加强大,它通过更加直观的接口暴露出可链式调用的 map /reduce 等操作。例如,让我们移除所有未激活的用户并收集剩余用户的名字:
$users = App\Models\User::all();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
注意:大多数 Eloquent 集合方法会返回新的 Eloquent 集合实例,但是 pluck, keys, zip, collapse, flatten 和 flip 方法除外,它们会返回一个 Base Collection 实例。同样,如果 map 操作返回的集合不包括任何 Eloquent 模型,那么它会被自动转换成集合基类。
可用的方法
所有 Eloquent 的集合都继承了 Laravel collection 对象;因此,他们也继承了所有集合基类提供的强大的方法。
另外,Illuminate\Database\Eloquent\Collection 类提供了一套上层的方法来帮你管理你的模型集合。大多数方法返回 Illuminate\Database\Eloquent\Collection 实例; 然而,也会有一些方法返回基于 Illuminate\Support\Collection 类的实例。
contains
diff
except
find
fresh
intersect
load
loadMissing
modelKeys
makeVisible
makeHidden
only
toQuery
unique
contains($key, $operator = null, $value = null)
contains 方法可用于判断集合中是否包含指定的模型实例。这个方法接收一个主键或者模型实例:
$users->contains(1);
$users->contains(User::find(1));
diff($items)
diff 方法返回不在给定集合中的所有模型:
use App\Models\User;
$users = $users->diff(User::whereIn('id', [1, 2, 3])->get());
except($keys)
except 方法返回给定主键外的所有模型:
$users = $users->except([1, 2, 3]);
find($key)
find 方法查找给定主键的模型。如果 $key 是一个模型实例, find 将会尝试返回与主键匹配的模型。 如果 $key 是一个关联数组, find 将会使用 whereIn() 返回所有匹配 $keys 的模型:
$users = User::all();
$user = $users->find(1);
fresh($with = [])
fresh 方法从数据库检索集合中的每个模型的新实例。 此外,任何指定的关系都会被预先加载:
$users = $users->fresh();
$users = $users->fresh('comments');
intersect($items)
intersect 方法返回给定集合中也存在的所有模型:
use App\Models\User;
$users = $users->intersect(User::whereIn('id', [1, 2, 3])->get());
load($relations)
load 方法会提前加载集合中所有模型的指定关系:
$users->load('comments', 'posts');
$users->load('comments.author');
loadMissing($relations)
如果尚未加载关系,loadMissing 方法将会为集合中的所有模型加载给定的关系:
$users->loadMissing('comments', 'posts');
$users->loadMissing('comments.author');
modelKeys()
modelKeys 方法返回集合中所有模型的主键:
$users->modelKeys();
// [1, 2, 3, 4, 5]
makeVisible($attributes)
makeVisible 方法显示集合中的每个模型的指定隐藏属性:
$users = $users->makeVisible(['address', 'phone_number']);
makeHidden($attributes)
makeHidden 隐藏集合中的每个模型指定属性:
$users = $users->makeHidden(['address', 'phone_number']);
only($keys)
only 方法返回给定主键的所有模型:
$users = $users->only([1, 2, 3]);
toQuery()
toQuery 方法返回一个 Eloquent 查询构建器实例,该实例在集合模型的主键上包含一个 whereIn 约束:
$users = App\Models\User::where('status', 'VIP')->get();
$users->toQuery()->update([
'status' => 'Administrator',
]);
unique($key = null, $strict = false)
unique 方法返回集合中的所有唯一模型。并且删除与集合中另一个模型有相同主键的同一类型的所有模型。
$users = $users->unique();
自定义集合
如果你需要使用自定义 Collection 对象与自己的扩展方法一起使用, 可以在你的模型上重写 newCollection 方法:
<?php
namespace App\Models;
use App\Support\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
/**
* 创建一个 Eloquent 集合实例
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
return new CustomCollection($models);
一旦你定义了 newCollection 方法, 你将随时可以从你的自定义集合中接收一个 Collection 返回的一个模型实例.。如果要为应用程序的每个模型使用自定义集合,就应该重写所有模型扩展的基类模型中 newCollection 方法。
本文章首发在 LearnKu.com 网站上。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
原文地址:https://learnku.com/docs/laravel/8.x/elo...
译文地址:https://learnku.com/docs/laravel/8.x/elo...
上一篇
下一篇
Markdown 文本
纠错改进
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:6
推荐文章:
更多推荐...
博客
8 张图掌握 Laravel 的 Eloquent 关联关系
74
15
9个月前
翻译
30 个 Laravel Eloquent 的隐藏技巧
82
17
9个月前
博客
基于 GD 库和 phpqrcode 的海报生成插件
62
34
1年前
博客
whereHas性能调优——采用 where in 语法实现优化 查询关联
25
2年前
博客
Laravel livewire 学习资源集合
15
2年前
博客
[扩展包] Laravel-wherehasin 提升 ORM 关联关系查询性能 (优化 whereHas 性能)
84
58
2年前
讨论数量: 2
发起讨论
只看当前版本
ChoChik
3年前
为什么有些方法文档中找不到??
个点赞 | 5 个回复 |
问答
| 课程版本 5.5
circle
4年前
内容重复小 bug 第二处?
个点赞 | 0 个回复 |
问答
| 课程版本 5.6
社区赞助商
成为赞助商
关于 LearnKu
LearnKu 是终身编程者的修道场
做最专业、严肃的技术论坛
LearnKu 诞生的故事
资源推荐
《社区使用指南》
《文档撰写指南》
《LearnKu 社区规范》
《提问的智慧》
服务提供商
其他信息
成为版主
所有测验
联系站长(反馈建议)
粤ICP备18099781号-6
粤公网安备 44030502004330号
违法和不良信息举报
由 Summer 设计和编码 ❤
请登录
提交
忘记密码?
or
注册
第三方账号登录
微信登录
GitHub 登录
内容举报
匿名举报,为防止滥用,仅管理员可见举报者。
我要举报该,理由是:
垃圾广告:恶意灌水、广告、推广等内容
无意义内容:测试、灌水、文不对题、消极内容、文章品质太差等
违规内容:色情、暴利、血腥、敏感信息等
不友善内容:人身攻击、挑衅辱骂、恶意行为
科学上网:翻墙、VPN、Shadowsocks,政策风险,会被关站!
不懂提问:提问太随意,需要再做一遍《提问的智慧》测验
随意提问:提问没有发布在社区问答分类下
排版混乱:没有合理使用 Markdown 编写文章,未使用代码高亮
内容结构混乱:逻辑不清晰,内容混乱,难以阅读
标题随意:标题党、标题不释义
尊重版权:分享付费课程、破解软件(付费),侵犯作者劳动成果
其他理由:请补充说明
举报
取消