mcpField
L
laravel:eloquent-relationships

laravel:eloquent-relationships

github.com/jpcaparas开发157171 次安装17 周前更新
代码仓库

关于 laravel:eloquent-relationships

面向 Laravel 开发者的 Eloquent 关系建模与加载技能,涵盖条件预加载、按关联关系筛选、数据透视表操作和聚合查询。

主要功能

  1. 01带条件的关系预加载
  2. 02按关联记录筛选
  3. 03多对多数据透视表操作
  4. 04关系聚合查询
  5. 05用作用域复用约束

适用场景

  1. 01仅加载符合条件的关联文章
  2. 02按关联记录是否存在筛选模型
  3. 03替换多对多关联
  4. 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