From 00decb09303aa5a1fdb3181bb8b82999746402db Mon Sep 17 00:00:00 2001 From: NGONYOKU Date: Sun, 7 Jan 2024 10:07:28 +0300 Subject: [PATCH] Including Related Data --- .../Controllers/Api/V1/CustomerController.php | 21 ++++++++++++------- app/Http/Resources/V1/CustomerResource.php | 3 ++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Api/V1/CustomerController.php b/app/Http/Controllers/Api/V1/CustomerController.php index 639d8e48a..3c51efe91 100644 --- a/app/Http/Controllers/Api/V1/CustomerController.php +++ b/app/Http/Controllers/Api/V1/CustomerController.php @@ -22,15 +22,18 @@ public function index(Request $request) $filter = new CustomerFilter(); # Transform the filer - $queryItems = $filter->transform($request); //[['column', 'operator', 'value']] + $filterItems = $filter->transform($request); //[['column', 'operator', 'value']] - # Check for valid filter options - if (count($queryItems) == 0) { - return new CustomerCollection(Customer::paginate()); - } else { - $customers = Customer::where($queryItems)->paginate(); - return new CustomerCollection($customers->appends($request->query())); + $includeInvoices = $request->query('includeInvoices'); + $customers = Customer::where($filterItems); + + # If included voices is true, we fetch customers together with invoices + if ($includeInvoices) { + $customers = $customers->with('invoices'); } + return new CustomerCollection( + $customers->paginate()->appends($request->query()) + ); } /** @@ -54,6 +57,10 @@ public function store(StoreCustomerRequest $request) */ public function show(Customer $customer) { + $includeInvoices = request()->query('includeInvoices'); + if ($includeInvoices) { + return new CustomerResource($customer->loadMissing('invoices')); + } return new CustomerResource($customer); } diff --git a/app/Http/Resources/V1/CustomerResource.php b/app/Http/Resources/V1/CustomerResource.php index 9349a0bc4..b1618cd7f 100644 --- a/app/Http/Resources/V1/CustomerResource.php +++ b/app/Http/Resources/V1/CustomerResource.php @@ -22,7 +22,8 @@ public function toArray(Request $request): array 'city' => $this->city, 'state' => $this->state, 'address' => $this->address, - 'postalCode' => $this->postal_code + 'postalCode' => $this->postal_code, + 'invoices' => InvoiceResource::collection($this->whenLoaded('invoices')) ]; } }