API использует функцию Laravel Resource Collection для предоставления ответа JSON клиенту. Как обращаться со структурой кодирования приложения при наличии сложной логики приложения.
Вот класс Model. Модель BookTransaction
имеет флаг type
, чтобы различать, является ли запись заимствованием (b) или возвратом (r).
class Member extends Model
{
protected $table = 'lms_members';
protected $primaryKey = 'member_id';
protected $guarded = ['member_id'];
public function user()
{
return $this->belongsTo('User');
}
public function transactions()
{
return $this->hasMany(BookTransaction::class, 'member_id', 'member_id');
}
}
Ресурс и коллекция ресурсов:
class Member extends JsonResource
{
public function toArray($request)
{
return [
'member_id' => $this->member_id,
'user_id' => $this->user_id,
'name' => $this->name,
'joined_date' => $this->joined_date,
'barcode' => $this->barcode,
'rfid' => $this->rfid,
'image' => $this->image,
'remark' => $this->remark,
'user' => $this->whenLoaded('user'),
];
}
}
class MemberCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection,
'meta' => [
'result_count' => $this->collection->count(),
]
];
}
}
Цель состоит в том, чтобы использовать класс Resource для создания ответа для данных, который будет включать в себя больше атрибутов, чем описанный.
Например, если это будет создание элементов с общим количеством заимствований, общим количеством возвращаемых и разницей между двумя, как СУШИТЬ это?