- Eager Loading(先読み読み込み) 関連するデータを先読みして取得する方法です。これにより、N + 1 クエリ問題を回避し、効率的なデータの取得が可能です。
例えば、UserモデルとPostモデルがあり、Userは多数のPostを持つとします。以下のようにwithメソッドを使用して、Userモデルに関連する全てのPostを取得できます。
$users = User::with('posts')->get();
foreach ($users as $user) {
foreach ($user->posts as $post) {
// ポストの処理
}
}
- Querying Relationship(リレーションシップのクエリ) 関連するデータを動的にクエリして取得する方法です。これにより、関連する条件に基づいてデータをフィルタリングできます。
例えば、Userが公開済みのPostのみを取得する場合、以下のようにwhereHasメソッドを使用できます。
$users = User::whereHas('posts', function ($query) {
$query->where('status', 'published');
})->get();
- Nested Relationship(ネストしたリレーションシップ) 関連するデータの関係がネストされている場合、withメソッドをネストして使用することができます。
例えば、Userが多数のPostを持ち、Postが多数のCommentを持つ場合、以下のようにネストしたwithメソッドを使用してデータを取得できます。
$users = User::with('posts.comments')->get();
foreach ($users as $user) {
foreach ($user->posts as $post) {
foreach ($post->comments as $comment) {
// コメントの処理
}
}
}
これらの方法を使用することで、関連するデータを効果的に取得できます。詳細な使用方法や他の関連メソッドについては、Laravelの公式ドキュメントを参照してください。