2015-02-15 3 views
1

У меня есть таблицы категорий и предметов. Каждый элемент относится только к одной категории, и каждая категория имеет много элементов. Так, в категории модели, которую я определил это соотношение:Как использовать Laravel Pagination с образцами отношений?

public function items() 
{ return $this->hasMany('Item', 'catid'); } 

и я получить данные для категории таким образом:

$category = Category::find($id); 
return View::make('admin.categories.catdetails')->with('category', $category); 

и на мой взгляд, чем могу цикл по данным:

@foreach ($category->items as $item) 
     <tr>   
      <td> {{ $item->name }} </td> 
      <td> {{number_format($item->price, 2, '.', '')}} </td> 
     </tr> 
    @endforeach 

, но это приводит ко всем пунктам на странице. Как использовать laravel pagination в случае, если у меня так много предметов для одной страницы? Как я могу использовать

::paginate() // in controller or model 
->links() // in view 

, как, до сих пор, он бросает много ошибок, и я не могу понять это. Спасибо заранее.

ответ

4

Вы можете вызвать paginate() на объект отношений, доступ к которым осуществляется с помощью ->items() (не ->items)

$items = $category->items()->paginate(10); 

return View::make('admin.categories.catdetails') 
    ->with('category', $category) 
    ->with('items', $items); 

Затем на ваш взгляд:

@foreach ($items as $item) 

И:

$items->links() 

Вы можете использовать атрибут доступа для достижения желаемого. В модели:

public function getPaginatedItemsAttribute(){ 
    return $this->items()->paginate(10); 
} 

И затем использовать его как это:

@foreach ($category->paginatedItems as $item) 

И:

$category->paginatedItems->links() 
+0

спасибо. но я спрашиваю, можем ли мы это сделать, не отправляя 2 разных переменных (категории и элементы). Есть ли решение? –

+0

Ну да и нет. Вы можете это сделать, но вам нужно будет создать переменную типа ' items() -> paginate (10); ?> 'и я не вижу, как это было бы лучше, чем передавать его с контроллера. – lukasgeiter

+0

Я попытался сделать разбивку на страницы на модели. 'public function items() {return $ this-> hasMany ('Item', 'catid') -> paginate (10); } ', но он терпит неудачу. –