Нарушение ограничения целостности в laravel - PullRequest
2 голосов
/ 16 апреля 2020

enter image description hereenter image description here Я передаю ID в URL, чтобы перейти на страницу формы Я хочу, но я хочу передать тот же ID , когда я нажму кнопку отправки, и я хочу передать тот же ID имени таблицы базы данных "creation_by"

Вот мой маршрут: -

Route::get('/post/{id}', 'PostsController@create');

Вот мой контроллер: -

public function create(){
  return view('Posts.CreatePost');

}

public function store(Request $request){
    post::create([
              'title'=>$request->title,
              'body'=>$request->body,
              'user_id'=>Auth::user()->id,
              'filled_by'=>Auth::user()->id,
              'created_by' => $request->route('id'),
            ]);

    return redirect('/profile/' . auth()->user()->id);
    }

Вот моя миграция : -

public function up(){
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('title');
            $table->text('body');
            $table->string('created_by');
            $table->string('filled_by');
            $table->timestamps();

            $table->index('user_id');
        });
    }

Вот моя модель: -

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{ protected $gaurded = [];

  protected $fillable = ['title', 'body', 'user_id', 'created_by', 'filled_by'];

    public function user()
    {
      return $this->belongsTo(User::class);
    }
}

Ошибка, которую я получаю: SQLSTATE [23000]: целостность нарушение ограничения: 1048 Столбец «create_by» не может быть пустым (SQL: вставить в posts (title, body, user_id, filled_by, created_by, updated_at, created_at) значения (adsa, asdas, 1, 1,?, 2020-04-16 20:54:30, 2020-04-16 20:54:30))

Я только начинающий в программирование и laravel так что извините, если я тупой

-Спасибо

1 Ответ

2 голосов
/ 17 апреля 2020

Вы получаете эту ошибку, потому что $request->route('id') пусто, и ваша база данных не позволяет пустому столбцу created_by.

Для отладки проверьте содержание вашего запроса:

public function store(Request $request){

    // Die and dump the request:
    dd($request->all());

    post::create([
              'title'=>$request->title,
              'body'=>$request->body,
              'user_id'=>Auth::user()->id,
              'filled_by'=>Auth::user()->id,
              'created_by' => $request->route('id'),
            ]);

    return redirect('/profile/' . auth()->user()->id);
    }

Я полагаю, что вы не правильно получаете значение id из запроса.

Возможно, вы хотите получить его с помощью $request->id, но трудно сказать, не глядя на ваш клинок. Если вы можете поделиться своим мнением, я отредактирую свой ответ.


Редактировать: Кроме того, ваш маршрут неверен. Чтобы указать на метод контроллера create(), вам не нужно передавать id на ваш маршрут. По определению вы хотите СОЗДАТЬ объект, который еще не существует и, следовательно, еще не имеет идентификатора.

С помощью метода create () ваш маршрут должен выглядеть следующим образом:

Route::get('/post/create', 'PostsController@create');

Кроме того, если вы хотите следовать Laravel соглашениям об именах (поверьте мне, вы делаете это), ваши контроллеры должны быть названы в единственном числе и в URL-моделях во множественном числе. То есть это будет выглядеть так:

Route::get('/posts/create', 'PostController@create');

И маршрут для вашего метода store () должен выглядеть так:

Route::post('/posts', 'PostController@store');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...