私のDB内のレコードを正しく取得し、textfieldに値を出力します。しかし、私のデータベースを更新したいとき、それは動作しません。それはSaveメソッドでDBに既に存在するモデルは更新されません
save()
方法はまた、既にデータベースに を存在するモデルを更新するために使用することができる文書で述べています。モデルを更新するには、モデルを取得する必要があります。
だから、私は2つのブレードのテンプレートショーと編集を持っています。最初のブレードは、データベースに値が存在することを示します(GET REQUEST)。 2番目のブレードは、ユーザーがデータを更新するための編集フォームを示します。 (POST REQUEST)。
show.blade.php
<form class = "form-vertical" role = "form" method = "post" action = "{{ route ('account.show', $result->id) }}">
<h3>View Employee</h3>
<hr>
<div class = "form-group">
<label for = "email" class = "control-label">Email Address</label>
<input type = "text" name = "email" class = "form-control" placeholder = "{{ $result->email }}" readonly>
</div>
<div class = "form-group">
<label for = "username" class = "control-label">Username</label>
<input type = "text" name = "username" class = "form-control" placeholder = "{{ $result->username }}" readonly>
</div>
<input type = "hidden" name = "_token" value = "{{ Session::token() }}">
</form>
edit.blade.php
<form class = "form-vertical" role = "form" method = "post" action = "{{ route ('account.edit', $result->id) }}">
<h3>Edit Employee</h3>
<hr>
<div class = "form-group">
<label for = "email" class = "control-label">Email Address</label>
<input type = "text" name = "email" class = "form-control" value = "{{ $result->email }}">
</div>
<div class = "form-group">
<label for = "username" class = "control-label">Username</label>
<input type = "text" name = "username" class = "form-control" value = "{{ $result->username }}">
</div>
<div class = "form-group">
<button type = "submit" class = "btn btn-success">Save</button>
</div>
<input type = "hidden" name = "_token" value = "{{ Session::token() }}">
</form>
コントローラー:
//SHOW
public function showEmployee($id)
{
$result = User::find($id);
//key //value
return view ('account.show')->with('result', $result);
}
//EDIT
public function editEmployee($id)
{
$result = User::find($id);
return view ('account.edit')->with('result', $result);
}
//UPDATE
public function updateEmployee(Request $request, $id)
{
$this->validate($request, [
//This will be unique in users table
'email' => 'required|unique:users,email,'.$id.'|email|max:255',
'username' => 'required|unique:users,username,'.$id.'|alpha|max:20',
]);
$email = $request['email'];
$username = $request['username'];
$user = User::findOrFail($id);
$user->email = $email; //Accessing properties of Model
$user->username = $username;
$user->save();
return view ('account.show');
}
ルート:
//SHOW
Route::get('/show/{id}',
[
'uses' => '\App\Http\Controllers\[email protected]',
'as' => 'account.show',
]);
//EDIT
Route::get('/edit/{id}',
[
'uses' => '\App\Http\Controllers\[email protected]',
'as' => 'account.edit',
]);
//UPDATE
Route::post('/edit/{id}',
[
'uses' => '\App\Http\Controllers\[email protected]',
'as' => 'account.edit',
]);
私はlaravelの専門家ではありませんが、問題は、新しいユーザーを作成して名前を入力してから保存しようとしているためだと思うので、laravelはあなたが試みていると思います重複したオブジェクトを保存するには...オブジェクトがすでに存在するかどうかを確認してください。存在する場合はフェッチし、フィールドを変更して保存してください。それ以外の場合はjus新しいものを作成して保存しないでください。 – Polak
私はsave()と同じメソッドを使用して更新することができますが、その前に値を取得する必要があることを伝えるドキュメントをたどりました。 – Francisunoxx
はい、それをフェッチすることで、既に保存されているユーザーIDと他のフィールドを取得しているので、更新されたオブジェクト(データベースの実際の状態を表すオブジェクト)に基づいて変更を行うことができます。 。しかし、私はlaravelに関する経験がないことを覚えています。私はちょうどあなたに日曜日の助けを与えようとしています – Polak