Laravel:从关系而不是整个对象返回属性

Posted

技术标签:

【中文标题】Laravel:从关系而不是整个对象返回属性【英文标题】:Laravel: Return attribute from a relation and not the entire object 【发布时间】:2016-07-30 12:00:45 【问题描述】:

我正在使用 Laravel 开发 API,但我对关系 1:N(一对多)有疑问。有没有可能像这样只显示一个属性,creatorUser 是我的关系。


      "id": "string",
      "production": "string",
      "title": "string",
      "description": "string",
      "resourceType": "string",
      "collections": "string",
      "creatorUser: "name"

creatorUser 是我的关系,此刻我是这样的


      "id": "string",
      "production": "string",
      "title": "string",
      "description": "string",
      "resourceType": "string",
      "collections": "string",
      "creatorUser: 
         id:  "string",
         name: "string"
        

我不想从 creatorUser 之类的对象中检索数据,只是名称并像这样显示 "creatorUser: "name" 有什么办法吗?

我正在这样检索我的信息(这是我的控制器)

  return CTL_Resource::with(['creationCountry' => function ($query) 
           $query->select('idCountry', 'name');
         , 'creatorUser' => function ($query) 
           $query->select('idUser', 'name');
         , 'resourceType' => function ($query) 
           $query->select(['idResourceType', 'name']);
         , 'tags' => function ($query) 
           $query->select(['idTag' => 'name']);
         , 'quickTags' => function ($query) 
           $query->select(['idQuickTag' => 'name']);
         , 'relatedTo' => function ($query) 
           $query->select(['idRelatedTo' => 'name']);
         ])->orderBy('createTime', 'DESC')->paginate($request->per_page);

感谢您的帮助。 (不要问为什么id是字符串,哈哈哈,因为是UUID):P

【问题讨论】:

【参考方案1】:

在由 creatorUser 调用的模型内部.."App\User" .. 使用受保护的变量 $hidden 设置为数组并将字段名称(或属性名称)传递到数组中以隐藏该模型的 id在json返回对象中...

例如:

假设我有一个名为 Foo 的模型,并且在 Foo 模型内部我得到了返回:


    foo_order: 039,
    foo_id: 12982,
    foo_name: "Bar"   

在此示例中,我想从返回的 json 对象中删除或隐藏 foo_id。然后在我的"App\Foo" 模型中添加:

namespace app;

use whatever\goes\here;

class FooModel extends Model
 
    ...
    ...
    /*
    * Hide the listed fields (Attributes) 
    * from the returned json object
    */
    protected $hidden = array('foo_id');

当您从该特定表/模型“获取”结果时,结果应该如下:


    foo_order: 039,
    foo_name: "Bar"   

有关修改返回的 json 结果的更深层次的更多信息,请查看以下文档:

https://laravel.com/docs/5.4/eloquent-mutators

【讨论】:

以上是关于Laravel:从关系而不是整个对象返回属性的主要内容,如果未能解决你的问题,请参考以下文章

如何只返回 typeorm 关系的一个属性?

如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]

Laravel Eloquent 关系返回试图获取非对象的属性'office_name'

为 Laravel 关系返回 null 而不是“调用未定义的关系”错误

如何从原始查询中检索结果集作为数组而不是 Laravel 3 中的对象

带有 keyBy 的 Laravel 响应返回对象而不是数组