Получить сообщения foreach категории в Laravel

Я использую 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 сообщения).
Я перепробовал много вещей и искал в Интернете, но не мог найти способ обойти это.

0

Решение

Вы не можете сделать это с помощью limit в закрытой загрузке, потому что, как вы заметили, он ограничивает другой запрос, который выбирает все сообщения.

Вы можете легко получить одну связанную модель с нетерпением загрузки для hasMany с отношением помощника:

public function latestPost()
{
return $this->hasOne('Post')->latest();
}

но для n связанных моделей на каждого родителя, вам нужно немного более сложное решение — взгляните на:

  1. n на одного родителя

  2. 1 на одного родителя

1

Другие решения

  1. Может быть, вы можете использовать $ category = Category :: all (), чтобы сначала получить все категории.
  2. foreach $ category и получите последние четыре сообщения от $ posts = $ category-> posts
  3. объединить массив записей в один массив
  4. передать категории и сообщения для просмотра.

Приветствия.

Я надеюсь, что вы можете написать правильный foreach. А при получении сообщений используйте $ category-> posts вместо $ category-> posts (), что приводит к ошибке.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector