Как я могу создать отношение ресурса Laravel для принадлежности?

Я создал UserResource, который успешно возвращает все мои пользовательские атрибуты, включая организацию, которой он принадлежит. Это выглядит примерно так:

Ресурсы/User.php

return [
    'type' => 'users',
    'id' => (string)$this->id,
    'attributes' => [
        'name' => $this->name,
        'email' => $this->email,
        ...
        'relationships' => [
            'organization' => $this->organization,
        ],
    ];

В моей модели User есть отношение belongsTo для User->Organization.

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

Например, организация hasMany находится:

Ресурсы/Организация.php

return [
    'type' => 'organizations',
    'id' => (string)$this->id,
    'attributes' => [
        'name' => $this->name,
        ...   
        'relationships' => [
            'locations' => Location::collection($this->locations),
        ],
    ];

Я могу успешно вернуть коллекцию местоположений, принадлежащих организации. Мне не удалось вернуть отношение belongsTo.

Я пытался:

Ресурсы/User.php

'relationships' => [
    'organization' => Organization::collection($this->organization),
],

// or this
'relationships' => [
    'organization' => Organization::class($this->organization),
],

// or this
use App\Http\Resources\Organization as OrganizationResource;
...

'relationships' => [
    'organization' => OrganizationResource($this->organization),
],

Как я могу вернуть одну модель в качестве связанного ресурса? Спасибо за любые предложения!


person Damon    schedule 30.05.2020    source источник


Ответы (1)


Вы пробовали это с ключевым словом new?

'relationships' => [
    'organization' => new OrganizationResource($this->organization),
],
person Dan    schedule 30.05.2020
comment
Это было - спасибо! По моей наивности, почему мне нужно использовать new для возврата belongsTo, а можно просто использовать ::collection для возврата hasMany? - person Damon; 30.05.2020