Я использую Laravel 4
Вот мой контроллер:
public function getArticles()
{
$categories = Category::with(['posts' => function($query){
$query->orderBy('updated_at', 'DESC')->take(4)->get();
}])->get();
return View::make('articles', compact('categories'));
}
Вот мой взгляд:
@foreach($categories as $category)
<h1>{{$category->title}}</h1>
<ul>
@foreach($category->posts as $post)
<li>
<a href="{{ $post->url() }}">{{ $post->title }}</a>
</li>
@endforeach
</ul>
@endforeach
Моя категория Модель:
class Category extends Basemodel {
public function posts(){
return $this->hasMany('Post');
}
}
И моя модель сообщения:
class Post extends Basemodel {
public function category(){
return $this->belongsTo('Category');
}
}
Таким образом, он правильно отображает мои 6 категорий (названий), но отображает всего 4 сообщения, я хотел бы отобразить 4 последних сообщения для каждой категории (всего 24 сообщения).
Я перепробовал много вещей и искал в Интернете, но не мог найти способ обойти это.
Вы не можете сделать это с помощью limit
в закрытой загрузке, потому что, как вы заметили, он ограничивает другой запрос, который выбирает все сообщения.
Вы можете легко получить одну связанную модель с нетерпением загрузки для hasMany
с отношением помощника:
public function latestPost()
{
return $this->hasOne('Post')->latest();
}
но для n связанных моделей на каждого родителя, вам нужно немного более сложное решение — взгляните на:
Приветствия.
Я надеюсь, что вы можете написать правильный foreach. А при получении сообщений используйте $ category-> posts вместо $ category-> posts (), что приводит к ошибке.