I just learn to create rest api using laravelI have table user, user model and auth controllerThe register and login api running wellWhen I want to update user data (ex: name), the response return success but the data in database not change / updating
Here's my code
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Hash;use Illuminate\Support\Facades\Validator;use App\Models\User;use MatanYadaev\EloquentSpatial\Objects\Point;use Tymon\JWTAuth\Facades\JWTAuth;class AuthController extends Controller{ // Register a new user public function register(Request $request) { $validator = Validator::make($request->all(), ['name' => 'required|string|max:255','email' => 'required|string|email|max:255|unique:users','password' => 'required|string|min:8|confirmed','role' => 'required|string|in:user,admin','image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048','address' => 'nullable|string|max:255','latitude' => 'nullable|numeric|between:-90,90','longitude' => 'nullable|numeric|between:-180,180', ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } // Handle image upload $imagePath = null; if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('images', 'public'); } // Handle location data $location = null; if ($request->filled('latitude') && $request->filled('longitude')) { $longitude = $request->input('longitude'); $latitude = $request->input('latitude'); $location = new Point($longitude, $latitude); } // Create the user $user = User::create(['name' => $request->name,'email' => $request->email,'password' => Hash::make($request->password),'role' => $request->role,'image' => $imagePath,'address' => $request->address,'location' => $location, ]); // Generate a JWT token for the new user $token = Auth::login($user); return response()->json(['message' => 'User registered successfully','user' => $user,'token' => $token, ], 201); } // User login public function login(Request $request) { $validator = Validator::make($request->all(), ['email' => 'required|string|email','password' => 'required|string', ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } if (!$token = JWTAuth::attempt($request->only('email', 'password'))) { return response()->json(['message' => 'Invalid credentials'], 401); } return response()->json(['token' => $token, ]); } // User logout public function logout() { Auth::logout(); return response()->json(['message' => 'Successfully logged out']); } // Update user profile public function update(Request $request, $id) { $user = User::findOrFail($id); // Check if the authenticated user is allowed to update this user if (Auth::user()->role !== 'admin'&& Auth::id() !== $user->id) { return response()->json(['message' => 'Unauthorized'], 403); } // Validate the request data $validator = Validator::make($request->all(), ['name' => 'sometimes|required|string|max:255','email' => 'sometimes|required|string|email|max:255|unique:users,email,' . $user->id,'password' => 'sometimes|required|string|min:8|confirmed','role' => 'sometimes|required|string|in:user,admin','image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048','address' => 'nullable|string|max:255','latitude' => 'nullable|numeric|between:-90,90','longitude' => 'nullable|numeric|between:-180,180', ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } // Update user fields if ($request->has('name')) { $user->name = $request->input('name'); } if ($request->has('email')) { $user->email = $request->input('email'); } if ($request->has('password')) { $user->password = Hash::make($request->input('password')); } if ($request->has('role')) { $user->role = $request->input('role'); } if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('images', 'public'); $user->image = $imagePath; } if ($request->has('address')) { $user->address = $request->input('address'); } // Handle location data if ($request->filled('latitude') && $request->filled('longitude')) { $longitude = $request->input('longitude'); $latitude = $request->input('latitude'); $user->location = new Point($longitude, $latitude); } // Save updated user data $user->save(); return response()->json(['message' => 'User updated successfully','user' => $user, ], 200); } // Get user details public function detail($id) { $user = User::findOrFail($id); // Check if the authenticated user is allowed to see this user's details if (Auth::user()->role !== 'admin'&& Auth::id() !== $user->id) { return response()->json(['message' => 'Unauthorized'], 403); } return response()->json($user); } // Search for users public function search(Request $request) { // Validate the search query $validator = Validator::make($request->all(), ['query' => 'nullable|string|max:255','role' => 'nullable|string|in:user,admin', ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } // Get the search query and role from the request $query = $request->input('query'); $role = $request->input('role'); // Start building the query $users = User::query(); if ($query) { $users->where(function ($q) use ($query) { $q->where('name', 'like', "%$query%") ->orWhere('email', 'like', "%$query%"); }); } if ($role) { $users->where('role', $role); } return response()->json($users->get()); }}
I expect the data in database updating when success update through api