==== # Laravel Eloquent リレーションシップの実際の使用例 ## 機能:Eloquent リレーションシップ(belongsToとhasMany) ブログシステムを例に、Laravelの強力なEloquentリレーションシップ機能を説明します。 ## 実世界のシナリオ:ブログ記事とコメント管理システム ### モデルの定義 ```php // app/Models/Post.php hasMany(Comment::class); } // 1つの投稿は1人のユーザーに属する public function author() { return $this->belongsTo(User::class, 'user_id'); } } // app/Models/Comment.php belongsTo(Post::class); } // 1つのコメントは1人のユーザーに属する public function author() { return $this->belongsTo(User::class, 'user_id'); } } ``` ### コントローラーでの使用 ```php // app/Http/Controllers/PostController.php findOrFail($id); return view('posts.show', compact('post')); } // 新しいコメントを追加 public function addComment(Request $request, $postId) { $post = Post::findOrFail($postId); $post->comments()->create([ 'user_id' => auth()->id(), 'content' => $request->content ]); return redirect()->back()->with('success', 'コメントが投稿されました'); } // コメント数でフィルタリング public function popular() { $popularPosts = Post::withCount('comments') ->having('comments_count', '>', 10) ->orderBy('comments_count', 'desc') ->get(); return view('posts.popular', compact('popularPosts')); } } ``` ### ビューでの表示 ```blade {{-- resources/views/posts/show.blade.php --}}

{{ $post->title }}

投稿者: {{ $post->author->name }}

{{ $post->content }}

コメント ({{ $post->comments->count() }}件)

@foreach($post->comments as $comment)
{{ $comment->author->name }}

{{ $comment->content }}

{{ $comment->created_at->diffForHumans() }}
@endforeach
``` ## この機能の利点 1. **コードの簡潔性**: 複雑なJOINクエリを書く必要がなく、直感的な構文でリレーションデータを取得できます 2. **Eager Loading**: `with()`メソッドでN+1問題を簡単に回避できます 3. **保守性**: データベース構造の変更があっても、モデルの定義を変更するだけで対応できます このように、Laravelのリレーションシップ機能は実際のアプリケーション開発で非常に強力かつ実用的です。