SQLSTATE [23000]: нарушение ограничения целостности в laravel5.8.35 - PullRequest
0 голосов
/ 29 сентября 2019

Я очень плохо знаком с laravel и sqlite и пытаюсь создать новое «блюдо» в своем списке блюд, однако, как только я отправляю форму создания, я получаю следующую ошибку:

SQLSTATE [23000]: Нарушение ограничения целостности: 19 Сбой ограничения NOT NULL: dish.user_id (SQL: вставить в значения «dish» («name», «price», «user_id», «updated_at», «creation_at») (Supreme)Pizza, 15,?, 2019-09-29 05:43:42, 2019-09-29 05:43:42))

Я пробовал несколько различных модификаций в моей сети.php, DishController, UserController и сам create.blade.php формируются, но ни одно из изменений не сработало.Здесь задавались некоторые похожие вопросы, но ни одно из решений не помогло и моей конкретной проблеме.

Это мой файл web.php

Route::resource('dish', 'DishController');
Route::resource('user', 'UserController');

Auth::routes();

Route::get('/', 'UserController@index');
Route::get('/show/{id}', 'UserController@show');
Route::get('/show/{id}', 'UserController@create');
Route::get('users/{user}',  ['as' => 'users.edit', 'uses' => 'UserController@edit']);
Route::patch('users/{user}/update',  ['as' => 'users.update', 'uses' => 'UserController@update']);

Route::get('/dish', 'DishController@index');
Route::get('/show/{id}', 'DishController@show');
Route::get('/dish/create', ['as' => 'dish.create', 'uses' => 'DishController@create']);
Route::get('dishes/{dish}',  ['as' => 'dish.edit', 'uses' => 'DishController@edit']);
Route::patch('dishes/{dish}/update',  ['as' => 'dishes.update', 'uses' => 'DishController@update']);
Route::get('/dish/{dish}', 'DishController@destroy');

Соответствующая часть моего DishController:

 public function index()
    {
        $dishes = Dish::all();
        return view('dishes.index')->with('dishes', $dishes);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return View::make('dishes.create_form')->with('users', User::all());

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:255',
            'price' => 'required|integer|min:1',
            'user' => 'exists:user,id'
        ]);

        $dish = new Dish();
        $dish->name = $request->name;
        $dish->price = $request->price;
        $dish->user_id = $request->user;
        $dish->save();
        return redirect("dish/$dish->id");
    }

И соответствующая часть моего create_form:

<form method="POST" action='{{url("dish")}}'>
        {{csrf_field()}}
        <p><label>Name: </label><input type="text" name="name" value="{{old('name')}}"></p>
        <p><label>Price: </label><input type="text" name="price" value="{{old('price')}}"></p>
        <p><select name="Restaurant">
        @foreach ($users as $user)
            @if ($user->role == 'restaurant')
            <option value="{{$user->id}}" selected="selected">{{$user->name}}</option>
            @endif
        @endforeach
        </select></p>
        <input type="submit" value="Create">
    </form>

Общая идея состоит в том, что я перечисляю своих пользователей, у которых есть «роль» «ресторана», и когда я нажимаю на них, этопереводит меня к имеющимся у них блюдам (то есть перечисляет все блюда с выбранным идентификатором пользователя) и позволяет создать новое блюдо.

Когда я пытаюсь создать новое блюдо, я ввожу все необходимые данные и отправляю форму, но получаю сообщение об ошибке, как видно из заголовка.Он говорит, что dish.user_id имеет значение null, и показывает его как «?».

Это странно, поскольку данные POST показывают, что:

        name = "Supreme Pizza"
        price = "15"
        Restaurant = "7" (which is correct)

Я не могу на протяжении жизниЯ понимаю, в чем проблема, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 сентября 2019

В вашем контроллере PHP вы используете $ request-> user.который я не вижу в вашей HTML-форме.Итак, если вы хотите добавить текущего пользователя.Вы можете использовать Auth.

public function store(Request $request)
{
    $this->validate([
        'name' => 'required|max:255',
        'price' => 'required|integer|min:1',
        'user' => 'exists:user,id'
    ]);
    $dish = new Dish();
    $dish->name = $request->name;
    $dish->price = $request->price;
    $dish->user_id = Auth::user()->id;
    $dish->save();
    return redirect("dish/$dish->id");
}

Пожалуйста, используйте также Auth в верхней части контроллера

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