Funkcje take() i limit() nie będą działać z gorliwym ładowaniem, jeśli pobierzesz więcej niż jeden model nadrzędny za pomocą get().
Musisz więc zrobić inny sposób,
$categories = Category::with('contents')->get();
Po pobraniu $categories
, możesz wykonać pętlę foreach jak poniżej,
$contents = [];
foreach($categories as $category){
$category->limitedContents = $category->contents()->with('languages')->limit(4);
}
Robiąc to, otrzymasz 4 treści na kategorię we wszystkich kategoriach z limitedContents
.