/** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update(Request $request, $id) { // update a specific vendor $vendor = Vendor::with('codes')->find($id); $vendor->name = $request->name; $vendor->email = $request->email; $vendor->business = $request->business; $vendor->phone = $request->phone; $vendor->rent = $request->rent; $vendor->rate = $request->rate; $vendor->status = $request->status; $vendor->notes = $request->notes; $vendor->email_notification = $request->email_notification; $vendor->touch(); // sync codes $codes = array(); $newCodes = array(); // current codes foreach ($vendor->codes as $code) { array_push($codes, $code->name); } // new codes if (isset($request->codes)) { foreach ($request->codes as $code) { array_push($newCodes, $code['name']); } } $deleteCodes = array_diff($codes, $newCodes); // sync codes if (count($deleteCodes)) { Code::where('name', $deleteCodes)->delete(); } foreach ($newCodes as $code) { Code::firstOrCreate(array('vendor_id' => $vendor->id, 'name' => $code)); } // check for transactions if (count($newCodes)) { $transactions = Transaction::where('code', $newCodes)->get(); if (!$transactions->isEmpty()) { foreach ($transactions as $transaction) { $transaction->vendor_id = $vendor->id; $transaction->save(); } } } return response(Vendor::with(['transactions' => function ($query) { $query->orderBy('processed_at', 'desc'); $query->limit(100); }, 'codes'])->find($id), 200); }