我已经几次遇到这个问题了,我似乎找不到解决办法-我觉得我似乎缺少明显的东西。
我正在用Lumen制作JSON API,为特定用例建立特定的路由。为了加快加载时间,我只想输出将要使用的字段。
我的模型具有字段,关系和属性的组合。 在限制输出时,我正在努力指定属性
例如:
一个task
有time_records
。每个time_record
的{{1}}中有value
个。{p>
我想输出任务名称,时间记录值以及我在time
上设置的属性totalTime
,如下所示(这不是完整的代码,但希望能遍历这个想法)
task
如果我然后执行以下操作:
class Task extends Model {
protected $appends = [
'totalTime'
];
public function timeRecords() {
return $this->hasMany('TimeRecord');
}
public function getTotalTimeAttribute() {
$total = $this->timeRecords()->map(function($time_record){
return $time_record->value;
});
return array_sum($total);
}
}
然后输出,我得到了所有带有Task::get();
属性的任务。但是,如上所述,我只想输出一些属性:
totalTime
无论我做什么,似乎都无法获得属性输出。该值在数组中,但为空。
答案 0 :(得分:1)
要解决此问题,必须选择属性访问的字段。
因为我只是返回了Task::select('id', 'name')
->with([
'timeRecord' => function($query){
$query->select('id');
}
])
的ID,所以该属性无法计算time_record
,因为total_time
字段不是。
(只有在写出此问题时,我才找到答案...)
答案 1 :(得分:1)
您可以使用with()
方法获得该信息而无需回调。回调方法可为您过滤结果。
Task::select('id', 'name')
->with("timeRecords:id") // use comma for multiple columns
->get();