Ресурс API клиента Laravel со связями - PullRequest
0 голосов
/ 04 ноября 2018

Функция контроллера:

public function index () {
    // TESTED
    // The getAllActiveSuppliers() function just return Supplier::pagniate(10)
    $suppliers = $this -> model -> getAllActiveSuppliers();
    return new SupplierResource($suppliers);
}

Вернул Джсон:

    {
    "current_page": 1,
    "data": [
        {
            "id": 23,
            "name": "Test Name",
            "description": "Test Description",
            "created_by": {
                "id": 1,
                "name": "Test 1",
                "email": "admin@admin.com",
                "email_verified_at": null,
                "active": 1,
                "created_at": "2018-10-12 14:17:38",
                "updated_at": "2018-10-12 14:17:38"
            },
            "updated_by": {
                "id": 1,
                "name": "Test 1",
                "email": "admin@admin.com",
                "email_verified_at": null,
                "active": 1,
                "created_at": "2018-10-12 14:17:38",
                "updated_at": "2018-10-12 14:17:38"
            },
            "deleted_at": null,
            "created_at": "2018-10-31 01:46:11",
            "updated_at": "2018-11-02 22:05:14",

        }
    ],
    ...
}

Что я пытаюсь сделать:

В create_by и updated_by Я просто хочу показать name, email больше ничего.

Что я пытался сделать:

Я попытался создать коллекцию ресурсов API

Коллекция ресурсов API Supplier.php:

public function toArray($request)
{
    return parent::toArray($request);
}

1 Ответ

0 голосов
/ 05 ноября 2018

Сначала необходимо определить структуру для единственного объекта JsonResource:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        ...
        'created_by' => $this->created_by->only('name', 'email'),
        ...
    ];
}

А затем скажите ResourceCollection использовать класс:

Настройка базового класса ресурсов

Как правило, $this->collection свойство коллекции ресурсов автоматически заполнен результатом отображения каждого элемента коллекции в его единственный класс ресурсов. Предполагается, что единственный класс ресурсов быть именем класса коллекции без завершающего Collection строка.

Например, UserCollection попытается сопоставить данного пользователя экземпляры в ресурс User. Чтобы настроить это поведение, вы можете переопределить свойство $collects вашей коллекции ресурсов

https://laravel.com/docs/5.7/eloquent-resources#concept-overview)

Если ваша ResourceCollection не делает ничего лишнего, вам это может не понадобиться. Каждый JsonResource может преобразовать себя для коллекции с помощью метода collection(), например, JsonResource::collection($models)

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