SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'univ' не может быть пустым - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь вставить данные в таблицу, используя laravel и mysql, но вижу ошибку SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'univ' cannot be null, пока я не вставляю нулевое значение.Я заполняю все поля в форме.какова причина?пожалуйста, помогите.

Моя форма - education.blade.php, и ее код указан.

@section('content')

    <div class="container"><br>
        <h1 class="text-success text-center">Add Education Here</h1><br>
        <div class="col-md-offset-3 col-md-6 m-auto d-block">
            <form action="edu" method="post">
                <input type="hidden" name="_token" value="{{csrf_token()}}">
                <input type="text" name="degree" value=" MSc / BS" disabled>
                <div>
                    <div class="form-group">
                        <label>University: </label>
                        <input type="text" name="univ" id="" class="form-control">
                    </div>

                    <div class="form-group">
                        <label>Country: </label>
                        <input type="text" name="country" id="" class="form-control">
                    </div>

                    <div class="form-group">
                        <label>Year: </label>
                        <input type="number" name="year" id="" class="form-control">
                    </div>

                    <div class="form-group">
                        <label>Research Area: </label>
                        <input type="text" name="research" id="" class="form-control">
                    </div>
                </div>
                <input type="submit" name="submit" value="ADD!" class="btn btn-lg col-md-offset-3 col-md-6 m-auto d-block">
            </form>
        </div>
    </div>

@endsection

Код моей миграции приведен здесь.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateEducsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('educs', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('registrations');
            $table->string('degree');
            $table->string('univ');
            $table->string('country');
            $table->integer('year');
            $table->text('research_area');
            $table->timestamps();
        });
    }

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

Код моего контроллера указан EduContoller.php

<?php

namespace App\Http\Controllers;

use Request;

use App\educ;

class EduController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('education');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        educ::create(Request::all());
        return 'inserted';
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

, а код моей модели приведен здесь.

    <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class educ extends Model
    {
        //
        protected $fillable = ['user_id','degree','univ','country','year','research_area'];
    }

и выдается ошибка, которую я получаю при отправке формы.

Нарушение ограничения целостности: 1048 Столбец 'univ' не может быть пустым

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Ваша проблема заключается в том, что столбец univ равен нулю.Когда вы писали начальную миграцию для этой таблицы, вы не добавили модификатор столбца ->nullable().Таким образом, SQL, который создает таблицу, сгенерированную ORM, не имеет ожидаемого модификатора NULL.Здесь есть два варианта в зависимости от ваших критериев приемлемости: 1. Добавьте модификатор Nullable с миграцией. 2. Убедитесь, что вы отправляете Univ каждый раз, когда вы публикуете, и, таким образом, делаете это обязательным полем в интерфейсе для хорошего UX.

Этот список не является исчерпывающим, но он поможет вам.Надеюсь, что все идет хорошо!

0 голосов
/ 10 октября 2018

Вам нужно сделать так, чтобы столбец Univul обнулялся, как сказал masolano93.Самый простой способ сделать это ниже.

php artisan make:migration update_educs_table

В миграциях up метод

Schema::table('educs', function (Blueprint $table) {
    $table->string('univ')->nullable()->change();
});

Затем запустите миграцию

php artisan migrate
0 голосов
/ 10 октября 2018

Я не уверен, что именно делает educ::create(Request::all());, но не могли бы вы попробовать изменить эту строку с помощью приведенных ниже строк и сообщить нам, по-прежнему ли вы получаете ту же ошибку. Также примечание, вам все равно нужно добавить текст к univ, даже если вы не отправляете его, потому что, если вы не отправляете его, он обрабатывается как null

$education = new educ($request->all());
$education->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...