You limit the results to 8 records so that is going to be the first 8 that match and not 8 per category
You might be able to take something from this https://github.com/staudenmeir/eloquent-eager-limit by @staudenmeir but this is about limiting related models