我无法使用laravel更新数据库中的记录。我希望用户能够通过填写表格来更改其名称/电子邮件地址。但是,这不起作用。它给我这个错误“从空值创建默认对象”,我不知道我在做什么错。我希望有人可以帮助我解决这个问题。
我的控制器中的更新功能:
public function update(Request $request, $id)
{
$user = UserModel::find($id);
$name->name = $request->input('name');
$email->email = $request->input('email');
$user->save();
return view('edit');
}
我认为自己的表单:
<form id="form" action="{{ action('AccountController@update') }}">
@csrf
<div class="form-group">
<h5>Edit Acount info</h5>
<label for="">Name:</label><input name="name" type="text" value="{{ Auth::user()->name }}" class="form-control" id="edit_name">
<label for="">E-mail:</label><input name="email" type="text" value="{{ Auth::user()->email }}" class="form-control" id="edit_email">
<button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
</div>
</form>
我的模特:
class UserModel extends Model
{
protected $table = 'users';
protected $primarykey = 'id';
protected $fillable = ['name', 'email'];
}
答案 0 :(得分:2)
您正在尝试为对象name
和email
分配一个值。两者都不存在。您可能打算这样做:
public function update(Request $request)
{
auth()->user()->update([
'name' => $request->input('name'),
'email' => $request->input('email')
]);
return view('edit');
}
编辑:诚然,看到GET
正在执行更新操作是很奇怪的。我将其更改为POST
。还更改了操作以使用命名路由。如果愿意,可以保留动作助手。
<form id="form" action="{{ route('account.update') }}" method="POST">
@csrf
<div class="form-group">
<h5>Edit Account info</h5>
<label for="">Name:</label><input name="name" type="text" value="{{ auth()->user()->name }}" class="form-control" id="edit_name">
<label for="">E-mail:</label><input name="email" type="text" value="{{ auth()->user()->email }}" class="form-control" id="edit_email">
<button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
</div>
</form>
请确保您的路由也已更改为POST
路由。
Route::post('account/update', 'AccountController@update')->name('account.update');
不确定以上是否是您的实际路线,但是您可以轻松地更改:)
答案 1 :(得分:0)
看看您的错误,它应该可以工作:
public function update(Request $request, $id)
{
$user = UserModel::find($id);
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->save();
return view('edit');
}
这也是一种方式:
public function update(Request $request, $id)
{
$user = UserModel::find($id);
$user->update([
'name' => $request->input('name'),
'email' => $request->input('email')
]);
return view('edit');
}