Как разбить связанную модель на страницы в laravel

У меня есть две модели: RoomCategory и Room. и я хочу разбить на страницы все комнаты, связанные каждой категорией комнат, с помощью цикла foreach, вот мой MVC.

Модель

class RoomCategory extends \Eloquent {
    public function Room(){
        return $this->hasMany('Room','category_id','id','RoomCategory');
    }
}

class Room extends \Eloquent {
    public function RoomCategory(){
        return $this->belongsTo('RoomCategory','id','category_id','Room');
    }
}

Контроллер

public function index()
{
    $room_category = RoomCategory::get()
        ->with('Room')->paginate(1);

    return View::make('pages.roomlist', compact('room_category'));
}

Вид

@foreach($room_category as $category)
    {{$category->name}}
    @foreach($category->room as $rooms)

         {{$rooms->name}}

         {{$category->room->links()}}
    @endforeach
@endforeach

и я получил эту ошибку

Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Collection :: with ()

может кто-нибудь помочь мне разбить эти комнаты на страницы в цикле foreach категорий комнат. Благодарность


person wHooZaa    schedule 28.05.2015    source источник


Ответы (2)


Чтобы добиться того, чего вы хотите, вы должны получить все категории комнат, просмотреть их, а затем перебрать комнаты каждой категории.

Это пример кода:

public function index()
{
    $room_category = RoomCategory::with('Room')->paginate(1);

    return View::make('pages.roomlist', compact('room_category'));
}

Ваше мнение:

@foreach($room_category as $category)
    {{$category->name}}
    @foreach($category->Room as $rooms)
        {{$rooms->name}}
    @endforeach
@endforeach
person Sh1d0w    schedule 28.05.2015

Вам не нужен метод get (), если вы используете paginate. Замените это

$room_category = RoomCategory::get()
    ->with('Room')->paginate(1);

с этим

$room_category = RoomCategory::with('Room')->paginate(1);

ИЗМЕНИТЬ

Было бы хорошо, если бы вы не использовали ссылки для пагинации комнаты на своей странице индекса, а просто разбили бы на страницы свою категорию комнаты.

$room_category = RoomCategory::with([
                'Room' => function($query) {
                    $query->latest()->limit(5);
                }
                ])->paginate(3);

В обзоре индекса разбейте категории на страницы и сделайте ссылку на страницу каждой категории, а также разбейте свою комнату на их страницы.

index.blade.php

@foreach($room_category as $room_cat)
    @foreach($room_cat->Room as $room)
        <div class="room-section"></div>
    @endforeach
    <a href="{{ url('category', $room_cat->id) }}">View more of this category</a>
@endforeach

{{ $room_category->links() }}

Ваш Контроллер

public function showCategory($id)
{
    $room_category = RoomCategory::with([
                'Room' => function($query) {
                    $query->latest()->paginate(8);
                }
                ])->find($id);

    return View::make('category.show', compact('$room_category'));
}

и category / show.blade.php вы можете разбить комнату на страницы

@foreach($room_category->Room as $room)
    <div class="room-section"></div>
@endforeach

{{ $room_category->Room()->links() }}
person Sushant Aryal    schedule 28.05.2015
comment
снова произошла ошибка при вводе этого кода Call to undefined method Illuminate\Database\Eloquent\Collection::links() - person wHooZaa; 28.05.2015
comment
он разбивает на страницы $ room_category, а не $ category- ›room - person wHooZaa; 28.05.2015