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:从关系而不是整个对象返回属性的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]
Laravel Eloquent 关系返回试图获取非对象的属性'office_name'
为 Laravel 关系返回 null 而不是“调用未定义的关系”错误