简体   繁体   中英

SQLSTATE[23000]: Integrity constraint violation: 1048 laravel 5.7

I am getting error in Laravel 5.7:

Illuminate\Database\QueryException SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert into stores ( name , matric , phone , email , password , updated_at , created_at ) values (?, ?, ?, ?, ?, 2019-10-01 16:29:49, 2019-10-01 16:29:49))

This is my form:

<!DOCTYPE html>
<html>
<head>
    @section('title', 'Sign up for customer page')
</head>
<body class="text-center">
@extends('layout.app')

@section('content')

@endsection
@include('include.navbar')
<form class="form-signup" action="{{URL:: to('/store')}}" method="post">
  @csrf

  <h1 class="h3 mb-3 font-weight-normal">Please sign up as customer</h1>
  <label for="inputname" class="sr-only">Name</label>
  <input type="text" id="inputname" class="form-control" placeholder="Name" required>
  <label for="inputmatric" class="sr-only">ID matric</label>
  <input type="text" id="inputmatric" class="form-control" placeholder="ID matric" required>
  <label for="inputphon" class="sr-only">Phone No</label>
  <input type="text" id="inputphon" class="form-control" placeholder="Phone No" required>
  <label for="inputemail" class="sr-only">E-mail</label>
  <input type="text" id="inputemail" class="form-control" placeholder="E-mail" required>
  <label for="inputpassword" class="sr-only">Password</label>
  <input type="text" id="inputpassword" class="form-control" placeholder="Password" required>


  <button class="btn btn-lg btn-primary btn-block"  type="submit">Sign up</button>
  <p class="mt-5 mb-3 text-muted">&copy; 2017-2019</p>
</form>

</html>

This is UserController :

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\DB;
use App\store;//model name

class UserController extends Controller
{
    public function store(Request $request)
    {

        $this->validate($request,[
            'name'=> 'request',
            'matric'=> 'request',
            'phone'=> 'request',
            'email'=>'request',
            'password'=> 'request'

        ]);

        //store new customer
        $store = new store;   // valible and model name
        $store-> name = $request->input('name');
        $store-> matric = $request->input('matric');
        $store-> phone = $request->input('phone');
        $store-> email = $request->input('email');
        $store-> password = $request->input('password');

        //save new customer
        $store-> save();

        //redirect
        return redirect('/');
    }
}

This is the Migration:

<?php
//create the customer table
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStoresTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('stores', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string ('name');
            $table->integer ('matric');
            $table->string ('phone');
            $table->string ('email');
            $table->string ('password');
            $table->timestamps();
        });
    }

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

You are trying to save a null value in the name column even though it is required.

You are missing name attribute in your html form. Without this attribute your input data won't be passed to the controller and thus you are getting empty values. So add the name attribute to the input fields.

<label for="inputname" class="sr-only">Name</label>
<input type="text" id="inputname" name="name" class="form-control" placeholder="Name" required>
<label for="inputmatric" class="sr-only">ID matric</label>
<input type="text" id="inputmatric" name="matric" class="form-control" placeholder="ID matric" required>
<label for="inputphon" class="sr-only">Phone No</label>
<input type="text" id="inputphon" name="phone" class="form-control" placeholder="Phone No" required>
<label for="inputemail" class="sr-only">E-mail</label>
<input type="text" id="inputemail" name="email" class="form-control" placeholder="E-mail" required>
<label for="inputpassword" class="sr-only">Password</label>
<input type="text" id="inputpassword" name="password" class="form-control" placeholder="Password" required>

And also change your validation

$this->validate($request,[
    'name'=> 'required',
    'matric'=> 'required',
    'phone'=> 'required',
    'email'=>'required',
    'password'=> 'required'
]);

You can also take below steps to bypass this error in your Laravel website:-

  1. Update 'strict' => false in database.php file located at path \config\

  2. Comment below statement in Kernel.php file located at path \app\Http\

// \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

Hope it will help someone in future.

You should name your input with name="namehere" eg

<input type="text" id="inputname" name="name" class="form-control" placeholder="Name" required>

You might be sending data in text format:

. text pic
. json pic

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM