Я уже несколько раз сталкивался с этой проблемой и, похоже, не могу найти решение - мне кажется, что я упускаю что-то очевидное.
Я создаю JSON API с Lumen, создание конкретных маршрутов для конкретных случаев использования.Чтобы ускорить время загрузки, я хочу вывести только те поля, которые я буду использовать.
В моей модели есть комбинация полей, отношений и атрибутов. Я пытаюсь указать атрибут при ограничении вывода
Например:
A task
имеет time_records
.Каждый time_record
имеет value
из 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
.Однако, как уже упоминалось, я хочу вывести только некоторые атрибуты:
Task::select('id', 'name')
->with([
'timeRecord' => function($query){
$query->select('id');
}
])
Независимо от того, что я делаю, я не могу получить вывод атрибута с этим.Значение есть в массиве, но является нулевым.