SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец «имя», хотя он существует в моей таблице бд

#php #sql #database #laravel #migration

Вопрос:

Ошибка, даже если столбец существует в таблице переноса.

SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестное имя столбца в списке полей (SQL: вставка в tasks значения ( name , description , statuse_id , updated_at , created_at ) (Padaryti pietus, fsd, 2, 2021-07-07 09:45:47, 2021-07-07 09:45:47))

Миграция

 Schema::create('tasks', function (Blueprint $table) {
    $table->id();
    $table->string('task_name', 128);
    $table->text('task_description');
    $table->unsignedBigInteger('statuse_id');
    $table->foreign('statuse_id')->references('id')->on('statuses');
    $table->timestamps();
});
 

Контроллер задач

 public function store(Request $request)
{
   $validator = Validator::make($request->all(),
   [
       'task_name' => ['required', 'min:3', 'max:128'],
       'task_description' => ['required'],
       'statuse_id' => ['required', 'integer', 'min:1'],
   ]
   );
   if ($validator->fails()) {
       $request->flash();
       return redirect()->back()->withErrors($validator);
   }
   
   $task = new Task;
   $task->name = $request->task_name;
   $task->description = $request->task_description;
   $task->statuse_id = $request->statuse_id;
   $task->save();

   return redirect()->route('task.index')
       ->with('success_message', 'New task created successfuly');
 }
 

Задача create.blade.html

 <form method="POST" action="{{ route('task.store') }}">
    <div class="form-group">
        <label>Name:</label>
        <input type="text" name="task_name" class="form-control" 
               value="{{old('task_name')}}">
        <small class="form-text text-muted">Add a task name</small>
    </div>
    <label>Description:</label>
    <textarea name="task_description" id="summernote">
        {!!old('task_description')!!}
    </textarea>
    <small class="form-text text-muted">Add task description</small>
    <div class="form-group">
        <select name="statuse_id">
            @foreach ($statuses as $statuse)
            <option value="{{$statuse->id}}">{{$statuse->name}}</option>
            @endforeach
        </select>
        <small class="form-text text-muted">Select a status</small>
    </div>
    @csrf
    <button type="submit" class="btn">ADD</button>
</form>
 

Я вижу имя задачи в своей таблице БД в phpMyAdmin. Каково решение этой ошибки в данной ситуации?

Комментарии:

1. У тебя Task есть name , а не task_name

Ответ №1:

Вы пытаетесь вставить в базу данных данные в столбце name , пока его не существует.

Измените эту строку:

    $task->name = $request->task_name;
 

в

    $task->task_name = $request->task_name;
 

И это сработает.

Ответ №2:

Итак, для повторения этого еще раз, но просто чтобы объяснить немного больше, в процессе миграции вы установили , что то task_name , что вам нужно сделать в вашем контроллере задач, — это просто имя, поэтому task_name для выполнения задачи требуется изменить его на.

Кроме того, это является причиной получения ошибки столбца не найдено.

Ответ №3:

Замените эту строку

 $task->name = $request->task_name;
 

с

 $task->task_name = $request->task_name;
 

Комментарии:

1. Пожалуйста, добавьте некоторые пояснения к вашему ответу, чтобы другие могли извлечь из него уроки