$post = Post::where('slug', '=', $slug)->first(); $related = Post::whereHas('tags', function ($q) use ($post) { return $q->whereIn('name', $post->tags->pluck('name')); }) ->where('id', '!=', $post->id) // So you won't fetch same post ->get();