Laravel - SQLSTATE [2300]: ограничение нарушения целостности - электронная почта не может быть нулевой ошибкой в ​​базе данных - PullRequest
0 голосов
/ 02 августа 2020

Я получил эту ошибку

SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец «email» не может быть пустым (SQL: вставить в invites (email, token, updated_at, created_at) значения (?, JW5UCmfAhuPGVKMM, 2020-08-02 01:26:35, 2020-08-02 01:26:35))

в моем laravel приложение для приглашения пользователей. Это мой InviteController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Invite;
use App\Mail\InviteCreated;
use Illuminate\Support\Facades\Mail;


class InviteController extends Controller
{
    
    public function invite() {
        return view ('invite');

    }
    
    public function process(Request $request) {
        do {
            $var = str_random(32);
    $token = str_random();
    
    } while (Invite::where('token', $token)->first());

    Invite::create([
        'email'=>$request->get('email'), 
        'token'=>$token]);
        
        Mail::to($request->get('email'))->send(new InviteCreated($invite));

        return redirect()->back;
}
    
    public function accept($token){
        if(!$invite = Invite::where('token', $token)->first()){
            abort(404);
        
        }
        User::create(['email'=>$invite->email]);

        $invite->delete();
        return "Good job! Invite accepted";
    }
}

Миграции

public function up()
    {
        Schema::create('invites', function (Blueprint $table) {
            $table->increments('id');
            $table->string('email');
            $table->string('token', 16)->unique;
            $table->timestamps();
        });
    }

Маршруты

Route::get('/', function () {
    return view('welcome');
});

Route::get('invite', 'InviteController@invite')->name('invite');
Route::get('invite', 'InviteController@process')->name('process');
Route::get('accept/{token}', 'InviteController@accept')->name('accept');

Пожалуйста, что я здесь ошибаюсь?

1 Ответ

0 голосов
/ 02 августа 2020

вы можете сделать электронную почту незаполненной при миграции базы данных или поставить

protected guarded = [] ; //inside the model

, потому что вы используете массовое назначение, будьте осторожны, когда вы используете guarded off, вам нужно запустить проверку формы. см. laravel doc https://laravel.com/docs/7.x/eloquent#mass -присвоение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...