Ресурс Laravel API

Я пытаюсь создать API для своих таблиц данных, используя ресурс Laravel. У меня есть три модели с отношениями. Каждый раз, когда я нажимаю на свои маршруты API, чтобы проверить результат, я получаю нулевое значение в своих sub_specializations. Вот результат уже в формате JSON.

    { 
"data":[ 
    { 
        "first_name":"Rusty",
        "last_name":"Ferry",
        "specializations":{ 
            "specialization_id":11,
            "specialization_name":"Endocrinology"
        },
        "sub_specializations":null
    },
    { 
        "first_name":"Nadia",
        "last_name":"Ondricka",
        "specializations":{ 
            "specialization_id":22,
            "specialization_name":"ENT"
        },
        "sub_specializations":null
    },
    { 
        "first_name":"Erich",
        "last_name":"Torphy",
        "specializations":{ 
            "specialization_id":2,
            "specialization_name":"Cardiologist"
        },
        "sub_specializations":null
    }
    ]
}

Вот все мои ресурсы. Это DoctorsResource

    public function toArray($request)
{
    return [
        'first_name' => $this->first_name,
        'last_name'  => $this->last_name,
        'specializations' => new SpecializationsResource($this->specializations),
        'sub_specializations' => new SubSpecializationsResource($this->sub_specializations),
    ];
}

Ресурс специализаций

    public function toArray($request)
{
    return [
        'specialization_id' => $this->specialization_id,
        'specialization_name' => $this->specialization_name,
    ];

}

Специализации

    public function toArray($request)
{
    return [
        'sub_specialization_id' => $this->sub_specialization_id,
        'sub_specialization_name' => $this->sub_specialization_name,
        'doctors' => new DoctorsResource($this->doctors),
    ];
}

Наконец, это контроллер

    protected $user;

public function __construct(Doctors $doctors){
    $this->doctors = $doctors;
}

public function index()
{
    $doctors = $this->doctors->with('specializations', 'subSpecializations')->get();
    return DoctorsResource::collection($doctors);
}

Результат, который я ожидаю, похож на этот

{ 
"data":[ 
    { 
        "first_name":"Rusty",
        "last_name":"Ferry",
        "specializations":{ 
            "specialization_id":11,
            "specialization_name":"Endocrinology"
        },
        "sub_specializations": {
            "sub_specialization_name":"value"
       }
    }
  ]
}

person eugenebermudez    schedule 28.11.2019    source источник


Ответы (1)


Вы должны убедиться, что для конкретного врача есть данные о подспециализациях.

Если есть данные, добавьте их в Doctor Resource, иначе они будут пустыми.

Просто нужно изменить строку в ресурсе доктора, например:

'sub_specializations' => $this->sub_specializations !== null ? new SubSpecializationsResource($this->sub_specializations) : '',

То же самое можно сделать и с специализацией.

person Ashutosh Kamble    schedule 28.11.2019
comment
Спасибо, братан, кстати, извини за поздний ответ. Это помогло мне решить мою проблему - person eugenebermudez; 09.12.2019