【问题标题】:SQLSTATE[HY000]: General error - create an accountSQLSTATE[HY000]:一般错误 - 创建帐户
【发布时间】:2018-07-21 21:25:54
【问题描述】:

我正在使用 laravel 身份验证。在注册页面,用户需要填写姓名、姓氏、电子邮件和密码来创建帐户。稍后用户可以编辑他的个人资料帐户并插入更多信息,如地址、城市、邮政编码等,但创建帐户只需要姓名、姓氏、电子邮件和密码。

我使用 laravel auth 使用下面的代码构建上述逻辑,但在填写表单并单击“创建帐户”后出现错误:

SQLSTATE[HY000]:一般错误:1364 字段“facebook_id”没有默认值(SQL:插入usersnameemailpasswordupdated_at,@987654326 @) 值 (...)

你知道下面代码的错误是什么吗?

路线:

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

用户表迁移:

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('facebook_id')->unique();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->string('phone');
            $table->dateTime('dateRegister');
            $table->string('address');
            $table->string('zipCode');
            $table->string('city');
            $table->timestamps();
        });
    }
   }

用户模型:

   class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password', 'facebook_id', ''
    ];

    protected $hidden = [
        'password',
    ];
   }

注册控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    use RegistersUsers;
    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest');
    }
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),

        ]);
    }

}

【问题讨论】:

    标签: laravel


    【解决方案1】:

    如果您在注册过程中传递了 Facebook ID,请添加它:

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'facebook_id' => $data['facebook_id']
    ]);
    

    如果不是,则将此列设为可空:

    $table->string('facebook_id')->unique()->nullable();
    

    【讨论】:

      【解决方案2】:

      更改您的migration 并允许facebook_id 为空,否则在inserting 时提供facebook_id

      $table->string('facebook_id')->unique()->nullable();
      

      【讨论】:

        【解决方案3】:

        您需要将字段传递给带有值的create() 方法,或者在迁移中将其设置为nullable

        $table->string('facebook_id')->unique()->nullable();
        

        【讨论】:

          【解决方案4】:

          如果您没有提供 facebook_idcreate 方法,则在迁移文件中使其可为空

          $table->string('facebook_id')->unique()->nullable();
          

          【讨论】:

            猜你喜欢
            • 2021-06-16
            • 2012-10-24
            • 2012-10-25
            • 2014-12-31
            • 2019-01-04
            • 2021-09-10
            • 1970-01-01
            • 2021-03-20
            相关资源
            最近更新 更多