【发布时间】:2016-07-04 03:24:11
【问题描述】:
我正确检索数据库中的记录并打印出文本字段中的值。但是当我想更新我的数据库时,它就行不通了。它在文档中说
save()方法也可以用来更新已经存在的模型 在数据库中。要更新模型,您应该检索它。
所以我有两个刀片模板 show 和 edit。第一个刀片显示数据库中存在的值 (GET 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\AccountController@showEmployee',
'as' => 'account.show',
]);
//EDIT
Route::get('/edit/{id}',
[
'uses' => '\App\Http\Controllers\AccountController@editEmployee',
'as' => 'account.edit',
]);
//UPDATE
Route::post('/edit/{id}',
[
'uses' => '\App\Http\Controllers\AccountController@updateEmployee',
'as' => 'account.edit',
]);
【问题讨论】:
-
我不是 laravel 方面的专家,但我认为问题在于您正在创建一个新用户,填写名称然后尝试保存它,所以 laravel 认为您正在尝试保存重复的对象...您应该先验证对象是否已经存在...如果存在,请获取它然后修改字段并保存它,否则只需创建一个新的并保存它。
-
我只是按照文档说我可以使用相同的方法进行更新,即 save() 但在此之前我应该先检索值。
-
是的,您应该这样做,因为通过获取它,您正在获取用户 ID 和已保存的其他字段,然后您可以根据更新的对象(代表数据库的真实状态)。但是......请记住,我没有使用 laravel 的经验,我只是想给你周日的帮助
标签: php laravel laravel-5.2