Атрибуты paginate и Laravel - PullRequest
1 голос
/ 04 апреля 2019

Я перестраиваю свою функцию поиска с php на vue.

В php я использовал для добавления атрибутов мой класс модели, например, html-метку, миниатюру и т. Д. Я мог бы просто получить это с помощью $model->HtmlThumb иатрибуты будут загружены.Теперь, так как я получаю ответ от json, лейбла там нет.Я знаю, что могу просто использовать свойство $appends в классе модели.

Проблема в том, что атрибут всегда добавляется, чего я определенно не хочу.

Я знаю, что могу скрыть вручнуюэти атрибуты с помощью hideAttributes или чего-то в этом роде, но это не удобно делать в существующем приложении.

Таким образом, оно должно работать, но теперь возвращает коллекцию элементов вместо коллекции paginator.

$results = $db_query->paginate($num_of_results)->appends($result)->each(function($project){
    $result->setAppends([
        'ProjectDescription',
        'FileCountLabel',
    ]);
});

Я ищу способ сделать это правильно.

1 Ответ

0 голосов
/ 05 апреля 2019

Я только что исправил это с помощью ResourceCollection следующим образом:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class ProjectCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        // return parent::toArray($request);

        return [
          'data' => $this->collection->each(function($model){
            $model->setAppends([
                'ProjectDescription',
                'FileCountLabel',
            ]);
          }),
        ];
    }
}
$results = new ProjectCollection($db_query->paginate($num_of_results)->appends($appends));
...