【发布时间】:2014-09-08 05:05:57
【问题描述】:
我有两个相关的模型:
class Attribute extends Eloquent
{
public function categories()
{
return $this->hasMany('Category');
}
}
class Category extends Eloquent
{
public function attributes()
{
return $this->belongsTo('Attribute');
}
}
我想将所有属性及其类别作为 JSON 对象返回,但我只想选择两个模型中的某些字段(即不返回 JSON 中的“created_at”之类的字段)。
我试过了:
$attributes = Attribute::select('id', 'name')
->with(['categories' => function ($query) {
$query->select('categories.id', 'categories.name', 'categories.attribute_id');
}]);
Response::JSON($attributes->get());
但是尽管对相关模型进行了选择查询,但仍会返回未请求的字段:
attributes: [{
id: 3,
name: "Organisation",
categories: [{
id: 3,
name: "Asia HQ",
attribute_id: 3,
created_at: "2013-11-30 00:00:00",
updated_at: "2013-11-30 00:00:00"
}]
}]
如何在预加载时只选择相关模型中的某些列?
【问题讨论】:
-
检查执行了什么查询,因为对于
hasMany,它按预期工作。 -
@delmadord 我知道我可以在模型中设置 $hidden 和 $visible 。但是我需要在不同的页面上显示不同的字段,所以我想要一个动态的解决方案。
-
@MMacdonald 你应该检查变压器——这就是你需要的。再一次 - 您粘贴的代码按预期工作(L4.2),所以要么是
belongsToMany关系,这是错误的,要么你错过了一些东西。
标签: laravel laravel-4 eloquent