Я не могу отправить данные в базу данных в Laravel - PullRequest
1 голос
/ 27 марта 2020

Я новичок в Larave и использую Laravel Framework 6.17.1. Я получаю эту ошибку при отправке данных в базу данных с помощью формы. Ниже приводится сообщение об ошибке.

Illuminate \ Database \ QueryException SQLSTATE [HY000]: общая ошибка: 1364 Поле 'user_id' не имеет значения по умолчанию (SQL: вставить в posts ( title, updated_at, created_at) значений (Заголовок, 2020-03-27 07:55:06, 2020-03-27 07:55:06))

PostContolller. php

 public function create()
{
    //
    return view('posts.create');
}

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

Таблица

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('user_id')->unsigned();
        $table->string('title');
        $table->text('content');
        $table->timestamps();
    });
}

Маршрут

Route :: resource (' / posts ',' PostController ');

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Просто вставляйте вашу модель поста

всякий раз, когда вы используете метод create, убедитесь, что все ваши столбцы как fillable свойство введены в вашу модель

Пост. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['user_id','title','content'];

}

В вашем контроллере

public function store(Request $request)
{
    $id = Auth::user()->id;
    $request['user_id'] = $id;
    Post::create($request->all());
}
0 голосов
/ 27 марта 2020

Причина, по которой вы получаете эту ошибку, в том, что столбец user_id не имеет значения NULL. Для решения проблем убедитесь в следующем:

1) В Post Model добавьте следующую заполняемую строку:

protected $fillable = ['user_id', 'title', 'content'];

3) В вашем PostController. php, у вас должен быть следующий конструктор. Чтобы гарантировать, что единственный пользователь, прошедший аутентификацию, может создать сообщение.

 public function __construct()
{
    $this->middleware('auth');
}

2) Я предполагаю, что пользователь, отправляющий форму, является аутентифицированным пользователем в вашем приложении. Следовательно, в блэйд, где у вас есть ваша форма, добавьте следующую строку кода:

<input type="hidden" name="user_id" value="{{ Auth::user()->id }}">

В приведенном выше фрагменте кода мы передаем скрытое заполнение, которое содержит ваше значение user_id, полученное из Laravel Auth фасад.

Теперь, когда вы dd($request->all());, вы сможете увидеть user_id в вашем массиве.

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

0 голосов
/ 27 марта 2020

Вы не отправляете user_id в форме отправки из блейд-файла, т. Е. $ Request-> all () не содержит user_id

Если user_id не является обязательным, то добавьте $table->integer('user_id')->unsigned()->nullable(); в файл миграции

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