Коллекция paginate прохода Laravel для просмотра

Я хочу разбить все отделы с соответствующими компаниями на мой взгляд. Поэтому я создал соответствующие модели и для выбора только необходимых полей создал коллекцию. В моем контроллере я создаю экземпляр этой коллекции и хочу передать его моему представлению. Вот мой контроллер:

$deps = new App\Http\Resources\DepartmentCollection(
App\Department::where('active',1)->whereHas('company',function($query){
    $query->where('active',1);
})->with('company')->paginate(10));

Вот моя коллекция:

public function toArray($request)
{
    $arr = array();
    foreach($this as $t)
    {
        $a = array();
        $a['id'] = $t->id;
        $a['title'] = $t->title;
        $a['company_title'] = $t->company['title'];
        $a['company_id'] = $t->company['id'];
        $arr[] = $a;
    }
    return $arr;
}

Когда я возвращаю $deps в моем контроллере, чтобы я мог видеть необработанные данные, он выглядит хорошо.

data: {
    0 : {   
       id : 1
       title : "Prod.asdfasdf"
       company_title : "asdf"
       company_id : 1

Но всякий раз, когда я передаю $deps моему представлению, я всегда получаю законченные модели, как будто никогда не было никакой коллекции.

return $deps;
return view('abteilungen',['departments'=>$deps]);

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: я пытался с помощью

return view('abteilungen',['departments'=>$deps->toArray($request)]);

но это удалило информацию о нумерации страниц, предоставленную Laravel, а также доступ к

$departments->links()

на мой взгляд не будет работать.

3 ответа

Вы можете просто использовать Eloquent Builder и вернуть Collection только с выбранными столбцами, как это:

Department::where('active',1)
   ->whereHas('company',function($query){
       $query->where('active',1);
   })->with('company')
   ->select('id', 'title', 'company.id', 'company.title')
   ->paginate(10);

Попробуйте, я думаю, вам нужно выбрать столбцы компании перед загрузкой eagar:

Department::where('active',1)
   ->whereHas('company',function($query){
       $query->where('active',1);
   })
    ->with(['company' => function ($query) {
        $query->select('id', 'title');
   }])
   ->paginate(10);

Может быть, https://laravel-livewire.com/docs/2.x/pagination вам поможет. Я сделал это: view('myview')->with('data', $eloquentData->toArray()); и у меня все работало нормально.

Другие вопросы по тегам