Laravel 5 Laravel 5.4更新方法不更新
我有这条路线: Route::resource('my-account','ProfileController') 我的控制器中有此方法:Laravel 5 Laravel 5.4更新方法不更新,laravel-5,patch,Laravel 5,Patch,我有这条路线: Route::resource('my-account','ProfileController') 我的控制器中有此方法: public function update(Request $request, User $user) { DB::enableQuerylog(); $user->update([ 'first_name' => $request->first_name,
public function update(Request $request, User $user)
{
DB::enableQuerylog();
$user->update([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'phone' => $request->phone
]);
dd(\DB::getQuerylog());
}
我有以下表格:
<form class="form" role="form" method="POST" action="{{ url('/my-account/'. $user->id) }}">
{{ method_field('PATCH') }}
{{ csrf_field() }}
<div class="form-group" id="firstNameDiv">
<label class="control-label">First Name</label>
<input type="text" class="form-control" name="first_name" value="{{ $user->first_name }}">
<span class="help-block" id="firstNameError"></span>
</div>
{{method_字段('PATCH')}
{{csrf_field()}}
名字
当我提交表单时,表中的名字没有更新
如果我尝试dd($request->first_name),我会看到我输入的名称
DB日志返回一个空数组,如下所示:[],为什么它不更新?尝试将
dd
作为方法中要执行的第一件事,以确保它被触发。至少每次我似乎什么都没做的时候,我就是这样做的
接下来,为什么要在没有where
的情况下执行update
?除非要更新所有记录,否则查询中应该有where()
顺便说一句,我不确定这件事。。。您不应该将您的模型注入构造函数吗
要么试试这样
$user = User::find($id) // or in your case $user->find($id);
$user->firstname = $request->input('firstname');
$user->save();
或
如果不在表中使用created_at和updated_at,则应使用以下方法禁用它们:
public$timestamps=false 确保您的用户模型中有$fillable
protected $fillable = ['first_name', 'last_name', 'phone'];
谢谢,但我在不同的型号/控制器中使用完全相同的方法,并且在那里一切正常。用户被发送到我不需要在何处执行的方法。我将dd($request)放在方法中的第一件事,它向我显示了包含所有字段和正确值的请求。您是否尝试了
DB::table('users')
?如果这样做有效,那么您的雄辩的代码或雄辩的核心代码中一定有错误。请尝试使用查询生成器进行检查。对不起,我需要在哪里使用DB::table(“用户”),为什么?问题是,这与我拥有的其他控制器配合得很好。我将其全部更改为向该方法发送$id,而不是$user,并执行findOrFail等操作。我只需要理解为什么此代码在其他位置工作时不起作用。抱歉,我无法立即理解您在上一条评论中的意思。所以它可以工作,但不能只在那个控制器上。我认为它根本不起作用,所以我说使用Query builder而不是Eloquent来检查它是否是Eloquent的错。谢谢你的帮助,我很感激,如果你dd($user)
,你会得到什么?可能$user
实例不是您所认为的那样?
protected $fillable = ['first_name', 'last_name', 'phone'];