【问题标题】:Laravel: Return attribute from a relation and not the entire objectLaravel:从关系而不是整个对象返回属性
【发布时间】: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

【问题讨论】:

    标签: php api laravel eloquent relation


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-12-11
      • 1970-01-01
      • 2022-01-23
      • 2015-05-23
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多