laravel:eloquent-relationships について
Eloquent のリレーションの設計と読み込みを扱う Laravel スキルです。条件付き先行読み込み、関連データによる絞り込み、中間テーブル操作、集計を紹介します。
主な機能
- 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) => ...);
パターン
- 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を参照してください)
コメント
Markdown 対応