如何为 belongsTo 创建 Laravel 资源关系?

Posted

技术标签:

【中文标题】如何为 belongsTo 创建 Laravel 资源关系?【英文标题】:How can I create a Laravel Resource relationship for a belongsTo? 【发布时间】:2020-09-18 02:34:30 【问题描述】:

我创建了一个UserResource,它成功返回了我的所有用户属性,包括它所属的组织。它看起来像这样:

资源/User.php

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

在我的User 模型中,User->Organization 有一个belongsTo 关系。

我想返回组织资源,而不是返回实际的组织模型。

例如,组织hasMany 位置:

Resources/Organization.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),
],

如何将单个模型作为相关资源返回?感谢您的任何建议!

【问题讨论】:

【参考方案1】:

您是否尝试过使用 new 关键字?

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

【讨论】:

就是这样 - 谢谢!出于我自己的天真,为什么我需要使用new 来返回belongsTo,但可以简单地使用::collection 来返回hasMany

以上是关于如何为 belongsTo 创建 Laravel 资源关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 postgresql 数组数据类型创建 laravel 迁移

如何为每小时 15 分钟创建设置的 Laravel 时间表?

Laravel 4,如何为具有关系的表创建种子数据?

如何为 laravel 生成 .env 文件?

如何为帖子创建类别标签?我正在使用 laravel 8

如何为 8.x 版本更新 Laravel 安装程序?