Как получить свойство модели на пагинатном ресурсе - PullRequest
0 голосов
/ 03 июля 2019

Я хочу отобразить ресурс страницы в люмене, используя Resource.

Мне нужно это, как показано ниже, результат json:

{
  "meta": {
    "count": 10,
    "total": 100
  },
  "links": {
    "first": "http://localhost/page[limit]=10&page[offset]=0",
    "last": "http://localhost/page[limit]=10&page[offset]=10",
    "next": "http://localhost/page[limit]=10&page[offset]=10",
    "prev": "null"
  },
  "data": [
    {
      "type": "items",
      "id": "1"
    }
  ]
}

Это мой контроллер :

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Item\Eloquent\ItemModel as ItemModel;
use App\Http\Resources\ItemsResource;

public function completeitems(Request $request)
{
    $res    = ItemModel::paginate();
    return new ItemsResource($res);
}
?>

Это мой ItemResource :

<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;

class ItemsResource extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request
     *
     * @return array
     */
    public function toArray($request)
    {
        return [
            'type'          => 'items',
            'id'            => $this->id
        ];
    }
}

Из моего кода результат:

Undefined property: Illuminate\Pagination\LengthAwarePaginator::$id

Я пробовал это много раз и гуглил ошибку, но немного запутал. Как это решить? Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Используйте метод collection() для возврата нескольких моделей:

public function completeitems(Request $request)
{
    $res    = ItemModel::paginate();
    return ItemsResource::collection($res);
}
0 голосов
/ 03 июля 2019

Чтобы иметь метаданные и связать данные, вам нужно использовать Resource Collections :

php artisan make:resource ItemCollection

Больше информации вы можете получить здесь https://laravel.com/docs/5.8/eloquent-resources#resource-collections

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