Как я могу получить Laravel 5.2 Pagination для коллекции, отправляемой на просмотр?

Я использую Laravel 5.2 и использую таблицу полиморфных отношений для страницы каналов. В ленте есть картинки, статьи и ссылки, которые имеют свои соответствующие модели. Метод контроллера, который я использую для подачи, выглядит следующим образом:

public function index()
{
$allActivity = Activity::get();

$activity = collect();

foreach($allActivity as $act)
{

$modelString = $act->actable_type;
$class = new $modelString();
$model = $class->find($act->actable_id);

$activity->push($model);
}

return view('feed', compact('activity'));
}

и вот представление feed.blade.php

  @foreach($activity as $class)
// Gives me the model name so the correct partial view could be referenced
<?php
$split = explode("\\", get_class($class));
$model = lcfirst($split[1]);
?>

@include("partials.{$model}", [$model => $class])
@endforeach

Из-за этой настройки я не могу получить нумерацию страниц, используя метод, описанный в документации Laravel. Как я могу правильно реализовать нумерацию страниц, используя эту настройку? Любая помощь будет принята с благодарностью.

0

Решение

Доступ к вашим отношениям с помощью actable() отношение, которое вы должны иметь на вашем Activity модель. Это также поможет вам избежать использования find() в цикле, как вы, который даст вам проблему N + 1.

В вашей модели деятельности вы должны иметь actable метод:

class Activity
{
public function actable()
{
return $this->morphTo();
}
}

Тогда, по вашему мнению, вы можете лениво загрузить все полиморфные действующие отношения и перейти к представлению. Вы даже можете сохранить свой взгляд в чистоте и разрешить название модели в map() функция:

public function index()
{
$activity = Activity::with('actable')->get()->map(function($activity) {
$activity->actable->className = lcfirst(class_basename($activity->actable));
return $activity->actable;
});

return view('feed', compact('activity'));
}

Тогда по вашему мнению:

@foreach($activity as $model)
@include("partials.{$model->className}", [$model->className => $class])
@endforeach

Чтобы запустить это с нумерацией страниц это было бы:

контроллер:

public function index()
{
$activities = Activity::with('actable')->paginate(25);

return view('feed', compact('activities'));
}

Посмотреть:

@foreach($activities as $activity)
@include('partials.'.lcfirst(class_basename($activity->actable)), [lcfirst(class_basename($activity->actable)) => $activity])
@endforeach
1

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

Других решений пока нет …

По вопросам рекламы [email protected]