You can use Eloquent has() function to query relationships even two layers deep!
Example 1:
// Author -> hasMany(Book::class);
// Book -> hasMany(Rating::class);
$authors = Author::has('books.ratings')->get();
Example 2: Retrieve all posts that have at least one comment.
$posts = App\Post::has('comments')->get();
Example 3: Retrieve all posts that have nbre of comments.
$posts = App\Post::has('comments', '>=', 3)->get();
Example 4: Retrieve posts that have at least one comment with votes.
$posts = App\Post::has('comments.votes')->get();
also you can use orHas() to make many conditions.
If you need even more power, you may use the whereHas and orWhereHas methods to put "where" conditions on your has queries.
Example 5: Retrieve posts with at least one comment containing words like "hello".
$posts = App\Post::whereHas('comments', function (Builder $query) {
$query->where('content', 'like', '%hello%');
})->get();
Example 6: Retrieve posts with at least 3 comments containing words like "hello".
$posts = App\Post::whereHas('comments', function (Builder $query) { $query->where('content', 'like', '%hello%'); }, '>=', 3)->get();