关于 laravel:eloquent-relationships
面向 Laravel 开发者的 Eloquent 关系建模与加载技能,涵盖条件预加载、按关联关系筛选、数据透视表操作和聚合查询。
主要功能
- 01带条件的关系预加载
- 02按关联记录筛选
- 03多对多数据透视表操作
- 04关系聚合查询
- 05用作用域复用约束
适用场景
- 01仅加载符合条件的关联文章
- 02按关联记录是否存在筛选模型
- 03替换多对多关联
- 04获取关联记录的计数或总和
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:eloquent-relationships安装后在 Claude Code 中输入/laravel:eloquent-relationships确认已加载。
详细介绍
Eloquent 关系与加载
模型关系表达你的领域;只加载所需内容。
命令
# Typical loading
Post::with(['author', 'tags'])->withCount('comments')->paginate(20);
# Constrained eager loading
User::with(['posts' => fn($q) => $q->latest()->where('published', true)])->find($id);
# Pivot ops (many-to-many)
$post->tags()->sync([1,2,3]); // atomic replace
$post->tags()->syncWithoutDetaching([4]);
# Chunking large reads
Order::where('status', 'open')->lazy()->each(fn($o) => ...);
模式
- 查看
laravel:performance-eager-loading,了解 N+1 检测与测量 - 使用
whereHas()/has()按关联是否存在进行筛选 - 对于简单的聚合,优先使用
withCount、withSum、withMax - 对重复使用的约束应用全局 / 局部作用域
- 关系名称应保持一致,并在适当时使用复数形式
- Laravel 13+:序列化后的 Eloquent 集合(例如队列任务中的集合)现在会在反序列化后恢复预加载关系,与单模型行为一致——不要依赖关系缺失这一假设
- Laravel 13+:现在支持模型级属性,例如
#[DateFormat('Y-m-d')]和#[WithoutTimestamps](参见laravel:php-attributes)
评论
支持 Markdown