SQLSTATE [HY000]: общая ошибка: 1364 Поле 'branch_id' не имеет значения по умолчанию laravel 5.4 - PullRequest
0 голосов
/ 11 июня 2018

Привет, ребята, мне нужна ваша помощь.Я новичок в Laravel 5.4.Я пытаюсь добавить поле, которое является внешним ключом, но оно не добавлено, и ошибка не имеет значения по умолчанию.

Добавить представление

Тогда ошибка

Код контроллера пользователя:

    public function create()
{
    $branches = Branch::pluck('name', 'id');
    return view('users.create', ['branches' => Branch::all()]);
}


public function store(Request $request)
{
    $this->validate($request, [
        'branch_id' => 'required',
        'fname' => 'required',       
        'lname' => 'required',
        'contact_number' => 'required',
        'bday' => 'required',
        'position' => 'required',
        'status' => 'required',
        'username' => 'required',
        'password' => 'required'
    ]);

    User::create($request->all());

    session()->flash('success_msg', 'Employee has been added!');
    return redirect('/employees');
}

Модель пользователя:

public function branch()
{
  return $this->belongsTo(Branch::class);
}

Миграция пользователя:

public function up()
{
    Schema::dropIfExists('users');
    Schema::disableForeignKeyConstraints();
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('branch_id')->unsigned();
        $table->string('fname');
        $table->string('lname');
        $table->string('contact_number');
        $table->date('bday');
        $table->integer('position');
        $table->integer('status');
        $table->string('username');
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();

        $table->foreign('branch_id')->references('id')->on('branches')->onDelete('cascade');

    });

}

create.blade.php в пользователе

<div class="form-group">
    <label for="branch_id">Branch: </label>
    <!--{{ Form::select('branch_id', $branches, null) }}-->
    <select class="form-control" name="branch_id">
        @foreach ($branches as $branch)
            <option value= "{{ $branch->id}}">
              {{ $branch->name }}
            </option>
        @endforeach
    </select>
  </div>

Ответы [ 4 ]

0 голосов
/ 11 июня 2018
public function create()
{
    $branches = Branch::pluck('name', 'id');  // first time request
    return view('users.create', ['branches' => Branch::all()]); 
    // Branch::all() second time request and select all (*)
}

В этом коде вы 2 раза делаете запрос в дБ.Вместо этого используйте

public function create()
{
    $branches = Branch::pluck('name', 'id');
    return view('users.create', compact('branches'));
    // or return view('users.create', ['branches' => ]);
}


 $branches = Branch::pluck('name', 'id');
 dd($branches->all());

, чтобы напечатать

array:100 [▼
  1 => "branch1"
  2 => "branch2"
  3 => "branch3"
  4 => "branch4"
  .
  .  
  .
]

В поле зрения исправить это

@foreach ($branches as $branchId => $branchName)
   <option value= "{{ $branchId}}">
      {{ $branchName }}
   </option>
@endforeach

И модель User в fillable свойство add branch_id

0 голосов
/ 11 июня 2018

Вы должны добавить branch_id на модель пользователя как заполняемую, как это:

 protected $fillable = [
    'username', 'email', 'password', 'branch_id'
];

Я надеюсь, что это поможет вам

0 голосов
/ 11 июня 2018

Модель branch_id не видна модели, поскольку ее нет в массиве с возможностью заполнения.

In App \ User.php

protected $fillable = [ ... ]; // add branch_id
// or
protected $guarded = [];
0 голосов
/ 11 июня 2018

вам нужно добавить index() и nullable() в файл миграции, в котором вы объявили branch_id следующим образом: -

public function up()
{
Schema::dropIfExists('users');
Schema::disableForeignKeyConstraints();
Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('branch_id')->unsigned()->index()->nullable();
    $table->string('fname');
    $table->string('lname');
    $table->string('contact_number');
    $table->date('bday');
    $table->integer('position');
    $table->integer('status');
    $table->string('username');
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();

    $table->foreign('branch_id')->references('id')->on('branches')->onDelete('cascade');

});

}

Редактировать: - изменить это в своей форме.Вам необходимо объявить значение параметра перед foreach следующим образом: -

<div class="form-group">
<label for="branch_id">Branch: </label>
<!--{{ Form::select('branch_id', $branches, null) }}-->
<select class="form-control" name="branch_id">
<option value="" disabled selected>{{ trans('select_branch') }}</option>   
    @foreach ($branches as $branch)
        <option value= "{{ $branch->id}}">
          {{ $branch->name }}
        </option>
    @endforeach
</select>

Если еще не решено, проверьте, добавлен ли branch_id в модель fillable в User или нет.Добавьте его, если он не добавлен.

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