【问题标题】:Laravel form for creating user not working without error用于创建用户的 Laravel 表单无法正常工作
【发布时间】:2018-12-04 09:44:51
【问题描述】:

我遇到了一个不起作用的表单。我收到一条错误消息:

SQLSTATE[HY000]:一般错误:1364 字段 firstname 没有 默认值(SQL:插入users (role) 值(用户))。

除了它也没有在数据库中插入数据。请帮忙!!

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;class CreateUsersTable extendsMigration{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('firstname');
        $table->string('suffix')->nullable();
        $table->string('lastname');
        $table->integer('phoneNumber');
        $table->string('role');
        $table->string('streetName');
        $table->integer('streetNumber');
        $table->string('city');
        $table->string('zipcode');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('users');
}

}

我的表格:

{!! Form::open(['method'=>'POST', 'action'=>'UsersAdminController@store']) !!}
        @csrf

        <div class="form-group row">
            {!! Form::label('firstname', 'First name:') !!}
            {!! Form::text('firstname', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('suffix', 'Suffix:') !!}
            {!! Form::text('suffix', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('lastname', 'Last name:') !!}
            {!! Form::text('lastname', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('city', 'City:') !!}
            {!! Form::text('city', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('zipcode', 'Zipcode:') !!}
            {!! Form::text('zipcode', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('phoneNumber', 'Phone number:') !!}
            {!! Form::number('phoneNumber', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('streetName', 'Street name:') !!}
            {!! Form::text('streetName', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('streetNumber', 'Street number:') !!}
            {!! Form::number('streetNumber', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('email', 'E-mail:') !!}
            {!! Form::email('email', null, ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row">
            {!! Form::label('password', 'Password:') !!}
            {!! Form::password('password', ['class'=>'form-control']) !!}
        </div>

        <div class="form-group row mb-0">
            <div class="col-md-6 offset-md-4">
               {!! Form::submit('Create User', ['class'=>'btn btn-primary']) !!}
            </div>
        </div>

    {!! Form::close() !!}

和我的控制器:

public function store(UsersRequest $request)
{
    if(trim($request->password) == '')
    {
        $input = $request->except('password');

    }else{

        $input = $request->all();
        $input['password'] = bcrypt($request->password);
//$input['role'] = 'user';

        DB::table('users')->insert(
            ['role' => 'user']
        );

    }

    User::create($input);

    return back()->with('success' , 'User is succesfully created');

}

这是我在请求文件中的验证:

class UsersRequest extends FormRequest
{
/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    return true;
}

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [

        'firstname' => 'required',
        'suffix' => 'string',
        'lastname' => 'required',
        'phoneNumber' => 'required',
        'streetName' => 'required',
        'streetNumber' => 'required',
        'city' => 'required',
        'zipcode' => 'required',
        'email' => 'required',
        'password' => 'required',
    ];
}
}

这也是我的用户模型批量分配:

protected $fillable = [
    'firstname','suffix','lastname', 'phoneNumber', 'role', 'streetName', 'streetNumber', 'city', 'zipcode' ,'email', 'password',
];

【问题讨论】:

  • 你能死掉并转储$request并发布吗?
  • DB::table('users')-&gt;insert(['role' =&gt; 'user']); 您正在将一个新用户插入到数据库中,其中只有role 作为字段。 firstname 未设置且没有默认值,这就是您收到该错误的原因
  • @kerbholz 那么我该如何插入所有值呢?抱歉,我对此很陌生
  • @user10341554 给你:array:11 [▼ "_token" => "dT7jyI8wh8fbjpD4k1Cr8CAVNBDUMpWZZU9qmvyr" "firstname" => "ainsleys" "suffix" => "55238121" "lastname" => "kitchen " "city" => "Amsterdam" "zipcode" => "1123SD" "phoneNumber" => "0652482531" "streetName" => "peterstraat" "streetNumber" => "25" "email" => "ainsley@lol .com" "密码" => "123456789" ]
  • 有什么理由不使用 Laravel 内置的身份验证?

标签: php laravel forms


【解决方案1】:

您必须在名字列中插入一个值。您可以使用与角色列相同的方式执行此操作,只需扩展您的数组:

DB::table('users')->insert([
    'role' => 'user',
    'firstname' => 'The First Name',
]);

firstname 列也没有标记为 ->nullable(),因此当您在该表中插入一行时,它总是需要一个值。

【讨论】:

  • 这行代码不是已经这样做了吗? $input = $request->all();
  • ^ 那行代码只是将用户的请求保存到一个变量中,它没有做任何事情
【解决方案2】:
**replace this method with your controller**

public function store(UsersRequest $request)
{

        $input = $request->all();
        $input['password'] = bcrypt($request->password);
        $input['role'] = 'user';

        User::create($input);

        return back()->with('success' , 'User is succesfully created');
}

然后替换

protected $fillable = [
    'firstname','suffix','lastname', 'phoneNumber', 'role', 'streetName', 'streetNumber', 'city', 'zipcode' ,'email', 'password',
];

to 

 protected $guarded = [];

【讨论】:

  • 没有帮助,数据库中仍然没有数据
  • 但这不是 xddd idk 为什么。没有错误只有页面刷新和数据库中没有数据插入
【解决方案3】:

用你的控制器替换它:

public function store(UsersRequest $request)
{
    if(trim($request->password) == '')
    {
        $input = $request->except('password');

    }else{

        $input = $request->all();
    }
    $input['password'] = bcrypt($request->password);
    $input['role'] = 'user';

    User::create($input);

    return back()->with('success' , 'User is succesfully created');
}

【讨论】:

  • 仍然没有在数据库中插入数据。它刷新页面但没有给出错误。很奇怪!
  • 没有错误,想idk怎么办。它应该工作吗?你想看看我的路线吗?
【解决方案4】:

这不是将所有数据插入数据库的正确方法,而是如下更新您的控制器并检查它。

    public function store(UsersRequest $request){
    $user= New User([
            'firstname'         => $request->get('firstname'),
            'suffix'            => $request->get('suffix'),
            'lastname'          => $request->get('lastname'),
            'phoneNumber'       => $request->get('phoneNumber'),
            'role'              => $request->get('role'),
            'streetName'        => $request->get('streetName'),
            'city'              => $request->get('city'),
            'zipcode'           => $request->get('zipcode'),
            'email'             => $request->get('email'),
            'email_verified_at' => $request->get('email_verified_at'),
            'password'          => Hash::make($data['password']),
        ]);

        $user->save();

        return back()->with('success' , 'User is succesfully created');

        }

}

如果要使用,请添加验证。另外,请确保您的数据库已连接检查 .env 文件。

【讨论】:

  • 它仍然无法正常工作,没有错误没有数据传递到数据库。
  • 向我们展示您的路线
  • 显示你的 web.php 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多