我正在尝试更新数据库中的数据。如果我使用DB::table('users')->update($data)
,它将更新所有数据,但是DB::table('users')->where('id', $id)->update($data)
不会更新单个行。如何更新单行?
public function edit(Request $req,$id) {
$id = $req->input('id');
$name = $req->input('name');
$email = $req->input('email') ;
$data=array('name'=>$name,'email'=>$email) ;
//DB::table('users')->update($data);
DB::table('users')->where('id',$id)->update($data);
echo "data recorded successfully.<br/>";
}
Route::get('/update','TestController@index_update')->name('display');
Route::get('edit/{id}','TestController@show')->name('updateD');
Route::post('/editt/{id}','TestController@edit')->name('updateEdit');;
<form method="post" action = "{{route('updateEdit')}}" >
{!! csrf_field() !!}
<table>
<tr>
<td>Name</td>
<td>
<input type = 'text' name = 'name' value = "{{ $books[0]->name }}"/>
</td>
<td>email</td>
<td>
<input type = 'text' name = 'email'
value = "{{ $books[0]->email }}"/>
</td>
</tr>
<tr>
<td colspan = '2'>
<input type = 'submit' value = "Update student" />
</td>
</tr>
</table>
</form>
答案 0 :(得分:1)
您需要在表单中传递ID
尝试这个:
<form method="post" action = "{{url('/editt/', $books[0]->id)}}" >
{!! csrf_field() !!}
<table>
<tr>
<td>Name</td>
<td>
<input type = 'text' name = 'name' value = "{{ $books[0]->name }}"/>
</td>
<td>email</td>
<td>
<input type = 'text' name = 'email'
value = "{{ $books[0]->email }}"/>
</td>
</tr>
<tr>
<td colspan = '2'>
<input type = 'submit' value = "Update student" />
</td>
</tr>
</table>
</form>
即使您打电话给$req->input('id')
,在您的表格中我也看不到任何类似的东西。
简单的技巧总是使用dd($req->all());
来检查REQUEST
是否为您传递了正确的值,并且您知道可以在哪里开始调试。还使用dd();
检查您的ID是否通过,它将永远是您的朋友。
希望有帮助。
答案 1 :(得分:0)
在函数体内,您似乎正在覆盖名为$ id的url参数。因此,如果没有带有名称/关键字ID的请求正文,则在执行查询之前,您可能会有一个空ID。注释该行(函数中的第2行),然后重试。
答案 2 :(得分:0)
action = "{{route('updateEdit',['id'=>$books[0]->id])}}"