我想在用户表中插入一个外键,但它在 Laravel 8 中插入为空并带有强化

问题描述

添加一个外键列 o 指定用户的角色。 这是 users 表:在我将 nullable() 添加role_id 列之前,他们被告知 role_id 列没有认值,当我添加 nullable() 时,它们会将 NULL 值插入表中

Schema::create('users',function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('phone_number')->unique();
    $table->string('email')->unique()->nullable();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->integer('role_id')->unsigned()->nullable();
    $table->rememberToken();
    $table->timestamps();
    $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
});

这是角色表:

Schema::create('roles',function (Blueprint $table) {
    $table->increments('id');
    $table->string('type');
    $table->timestamps();
});

这是角色列的刀片代码我在刀片上添加一个数组,以在属性名称为“role_id”的选项标记显示内容,如您在刀片代码中所见

@PHP
    $role_array = ['employee','client'];
@endPHP

<div class="form-group row">
    <label for="role" class="col-md-4 col-form-label text-md-right">Role <span class="text-danger">*</span></label>
    <div class="col-md-6">
        <select id="role" name="role_id" class=" form-control">
            <option selected>Choose...</option>
            @foreach ($role_array as $x => $x_value)
                 <option value="{{++$x}}">{{$x_value}}</option>
            @endforeach
        </select>
    </div>
</div>

这是“CreateNewUser.PHP文件上的create方法

    public function create(array $input)
    {
        Validator::make($input,[
            'name' => ['required','string','max:255'],'email' => [
                'string','email','max:255',Rule::unique(User::class),],'phone_number' => [
                'required','min:10','max:13','role_id' => [
                'required','password' => $this->passwordRules(),])->validate();

        return User::create([
            'name' => $input['name'],'email' => $input['email'],'phone_number' => $input['phone_number'],'password' => Hash::make($input['password']),]);
    }

这是用户模型:

   protected $fillable = [
        'name','password','phone_number','role_id',];

解决方法

你必须通过 role_id 来创建方法

   return User::create([
            'name' => $input['name'],'email' => $input['email'],'phone_number' => $input['phone_number'],'password' => Hash::make($input['password']),'role_id' => $input['role_id'],]);

也适用于控制器中的角色

$role_array=Role::pluck('type','id');

然后在视图中

<select id="role" name="role_id" class=" form-control">
            <option selected>Choose...</option>
            @foreach ($role_array as $x => $x_value)
                 <option value="{{$x}}">{{$x_value}}</option>
            @endforeach
        </select>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...