【问题标题】:Laravel 5.4 update method does not updateLaravel 5.4 更新方法不更新
【发布时间】:2017-09-14 07:47:50
【问题描述】:

我有这条路线: Route::resource('my-account', 'ProfileController');

我的控制器中有这个方法:

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>

当我提交表单时,表格中的名字没有更新。

如果我尝试 dd($request->first_name) 我会看到我输入的名称。

DB日志返回一个空数组是这样的:[],为什么不更新?

【问题讨论】:

  • 如果你dd($user),你会得到什么?也许$user 实例不是您认为的那样?

标签: laravel-5 patch


【解决方案1】:

尝试将dd 作为您方法中要执行的第一件事,以确保它被触发。至少每当某事似乎没有做任何事情时,我都是这样做的。

接下来,你为什么要在没有where 的情况下使用update?除非您想更新所有记录,否则您的查询中应该有 where()

顺便说一句,对此不确定...您不应该将模型注入构造函数中吗?

要么尝试这样的事情

$user = User::find($id) // or in your case $user->find($id);
$user->firstname = $request->input('firstname');
$user->save();

或者

$user->where('id', $id)->update(['firstname' => $request->input('firstname')]);

【讨论】:

  • 谢谢,但我在不同的型号/控制器上做的完全一样,一切正常。用户被发送到我不需要在哪里做的方法。我将 dd($request) 放在方法中的第一件事,它向我显示了包含所有字段和正确值的请求。
  • 你试过DB::table('users') 吗?如果这样可行,那么您的 eloquent 代码或 eloquent 核心代码肯定有问题。请尝试使用查询生成器进行检查。
  • 抱歉,我需要在哪里使用 DB::table('users') 以及为什么?问题是这与我拥有的其他控制器一起工作得很好。我将其全部更改为向方法发送 $id 而不是 $user,并执行 findOrFail 等。我只需要了解为什么此代码在其他地方工作时不起作用
  • 哦,抱歉,没有立即理解您之前评论的意思。所以它可以工作,但不能只在那个控制器上工作。我认为它根本不起作用,所以我说使用 Query builder 而不是 Eloquent 来检查它是否是 Eloquent 的错。
  • 感谢您的帮助,非常感谢
【解决方案2】:

如果您不在表中使用 created_at 和 updated_at ,您应该使用以下方法禁用它们: 公共 $timestamps = false;

【讨论】:

    【解决方案3】:

    确保您的用户模型中有 $fillable

    protected $fillable = ['first_name', 'last_name', 'phone'];
    

    Read more in: Mass Assignment Eloquent Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2019-03-16
      • 2017-11-10
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多