Ресурс условного возврата Laravel - PullRequest
0 голосов
/ 01 июля 2018

У меня есть простой ресурс Laravel:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'unread' => $this->unread,
            'details' => new EmployeeAddressResource($this->employeeAddress),
        ];
    }
}

Это работает нормально, теперь я хочу сделать детали условными:

       'details' => $this
        ->when((auth()->user()->role == 'company'), function () {
               return new EmployeeAddressResource($this->employeeAddress);
                }),

и он тоже работает нормально, но как добавить другое условие для возврата другого ресурса? Например, если роль user, я хочу получить ресурс: CompanyAddressResource

Я пробовал это:

       'details' => $this
        ->when((auth()->user()->role == 'company'), function () {
                    return new EmployeeAddressResource($this->employeeAddress);
                })
        ->when((auth()->user()->role == 'user'), function () {
                    return new CompanyAddressResource($this->companyAddress);
                }),

но это не работает, когда я вошел как company, это не дает details

Как я могу сделать эту работу?

1 Ответ

0 голосов
/ 01 июля 2018

Вы можете сделать это так

public function toArray($request)
{
    $arrayData = [
        'id' => $this->id,
        'unread' => $this->unread
    ];

    if(auth()->user()->role == 'company'){
        $arrayData['details'] = new EmployeeAddressResource($this->employeeAddress);
    }else {
        $arrayData['details'] = new CompanyAddressResource($this->companyAddress);

    }

    return $arrayData
}
...