mcpField
L
laravel:eloquent-relationships

laravel:eloquent-relationships

github.com/jpcaparas開発157171 回インストール17 週間前に更新
リポジトリ

laravel:eloquent-relationships について

Eloquent のリレーションの設計と読み込みを扱う Laravel スキルです。条件付き先行読み込み、関連データによる絞り込み、中間テーブル操作、集計を紹介します。

主な機能

  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) => ...);

パターン

  • N+1 の検出と測定については、laravel:performance-eager-loading を参照してください
  • 関連データの存在で絞り込むには、whereHas() / has() を使用してください
  • 単純な集計には、withCount、withSum、withMax を優先してください
  • 繰り返し適用する制約には、グローバルスコープ / ローカルスコープを適用してください
  • リレーションシップ名は一貫性を保ち、適切な場合は複数形にしてください
  • Laravel 13 以降:シリアライズされた Eloquent コレクション(キューに登録されたジョブ内など)は、デシリアライズ後に、単一モデルと同様に Eager Load 済みのリレーションを復元するようになりました。リレーションが存在しないことを前提にしないでください
  • Laravel 13 以降:#[DateFormat('Y-m-d')] や #[WithoutTimestamps] などのモデルレベル属性を使用できます(laravel:php-attributes を参照してください)

コメント