Es gibt eine Entität User
, die in der Tabelle Users
angegeben ist.
Einige Felder in dieser Tabelle sind standardmäßig null.
Ich muss diese Felder aktualisieren und keine Nulldaten festlegen.
Dafür versuche ich, die Methode PATCH
in Laravel zu verwenden:
Routing:
Route::patch('users/update', '[email protected]');
Controller:
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
"name" => 'required|string|min:3|max:50',
"email_work" => 'email|max:255|unique:users',
"surname" => 'required|string|min:3|max:50',
"tel" => 'required|numeric|size:11',
"country" => 'required|integer',
"region" => 'required|integer',
"city" => 'required|integer'
]);
if ($validator->fails()) {
return response()->json(["message" => $validator->errors()->all()], 400);
}
$user = User::where("user_id", $id)->update([
"name" => $request->name,
"surname" => $request->surname,
"tel" => $request->tel,
"country" => $request->country,
"city" => $request->city,
"region" => $request->region,
"email_work" => $request->email
]);
return response()->json(["user" => $user]);
}
Bedeutet das, dass ich Daten zur Aktualisierung übergeben kann? Soll ich $id
-Parameter relativ zu Routing und Controller übergeben?
Wie verwende ich den rechten Handler für die PATCH-Methode in Laravel?
ihre Route ist:
Route::patch('users/update', '[email protected]');
ersetzen Sie Ihre Route durch die folgende Route, die für alle CRUD-Operationen verwendet wird:
Route::resource('users', 'UsersController');
wenn Sie ajax zum Übermitteln von Daten verwenden, ersetzen Sie Typ und URL durch Folgendes:
type: "patch",
url: "{{url('/')}}users/" + id,
wenn Sie ajax nicht verwenden, verwenden Sie Folgendes:
<form method="POST" action="{{url('/')}}users/".$id>
{{csrf_field()}}
{{ method_field('PATCH') }}
</form>
update: Nach Version 5.6 können Sie diese Syntax für die oben genannten Funktionen in einer beliebigen Blade-Datei verwenden:
<form method="POST" action="{{url('/')}}users/".$id>
@csrf
@method('PATCH')
</form>
Ja, Sie müssen eine ID für den Routenpatch senden. Beispiel aus https://laravel.com/docs/5.4/controllers#resource-controllers für Laravel
PUT/PATCH -/photos/{photo}, damit Sie kein update
Word für Ihre Route benötigen. Nur Benutzer/ID und Methoden PUT oder PATCH.
UPD für CRUD-Operationen:
// Routes
Route::resource('items', 'ItemsController');
// Form for update item with id=1
<form method="POST" action="{{ route('items.update', ['id' => 1])}}">
{!! csrf_field() !!}
<input name="_method" type="hidden" value="PATCH">
<!-- Your fields here -->
</form>
// Controller
public function update($id, Request $request)
{
// Validation here
$item = Item::findOrFail($id);
// Update here
}
Aktualisieren Sie das Routing wie unten beschrieben
Route::patch('/users/update/{id}',[
'uses' => '[email protected]'
]);