【问题标题】:SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default valueSQLSTATE [HY000]:一般错误:1364 字段“密码”没有默认值
【发布时间】:2021-04-16 04:23:03
【问题描述】:

我正在 Laravel 中创建一个小型测试网络商店。试图编辑用户配置文件。有这么多领域:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('phone')->nullable();
            $table->string('img')->nullable();
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

但是我尝试只更改其中的3个,并显示错误,其他人没有默认值,为什么它甚至会触及其他字段?还是我做错了什么?

public function user_edit(Request $request, User $user){

      $user->name = $request->name?$request->name:Auth::user()->name;
      $user->email = $request->email?$request->email:Auth::user()->email;
      $user->phone = $request->phone?$request->phone:(Auth::user()->phone?Auth::user()->phone:NULL);
      $user->save();

      return redirect()->back();
    }

【问题讨论】:

    标签: php sql laravel


    【解决方案1】:

    只需使用:

    $user->update();
    

    $user->save(); 将执行 INSERT

    编辑

    该错误可能是因为您的参数中的$user 未定义或未找到。

    因此,当您使用 ->save() 时,它不会更新您的用户实例,而是尝试创建一个新实例。

    您不能像这样注入经过身份验证的用户,如上所述,您可以使用:

      $user = auth()->user();
      $user->name = $request->name?$request->name:$user->name;
      $user->email = $request->email?$request->email : $user->email;
      $user->phone = $request->phone?$request->phone : ($user->phone?$user->phone:NULL);
      $user->save();
    

    说实话不是最好的,但可以解释错误。

    【讨论】:

    • update()fill([])->save() ... 调用相同的 save 方法
    • @lagbox 你是对的,所以这意味着 $user 没有正确设置,但更新也不应该工作。
    • 确切地说,它只是没有做任何事情,因为它是一个不存在的模型实例,对依赖注入做...他们切换到使用 auth 用户
    【解决方案2】:

    另外,我没有在任何地方指定user_id。所以,我在顶部添加了:

    $user=Auth::user();

    它奏效了。

    【讨论】:

      【解决方案3】:
      public function user_edit(Request $request, User $user){
      
        $user->name = $request->name?$request->name:Auth::user()->name;
        $user->email = $request->email?$request->email:Auth::user()->email;
        $user->phone = $request->phone?$request->phone:(Auth::user()->phone?Auth::user()->phone:NULL);
        $user->password = $request->password?$request->password:Auth::user()->password;
        $user->save();
      
        return redirect()->back();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-01
        • 2021-05-23
        • 2019-05-09
        • 2019-09-10
        • 2021-01-04
        • 2020-09-06
        • 2020-06-21
        • 2019-05-19
        相关资源
        最近更新 更多