【问题标题】:SQLSTATE[23000]: Integrity constraint violation in laravel5.8.35SQLSTATE[23000]:laravel5.8.35 中的完整性约束违规
【发布时间】:2020-01-28 20:44:55
【问题描述】:

我对 laravel 和 sqlite 非常陌生,我正在尝试在我的菜肴列表中创建一个新的“菜肴”,但是,一旦我提交了创建表单,我就会收到以下错误:

SQLSTATE[23000]:违反完整性约束:19 NOT NULL 约束失败:dish.user_id (SQL: insert into "disches" ("name", “price”、“user_id”、“updated_at”、“created_at”)值(Supreme Pizza、 15, ?, 2019-09-29 05:43:42, 2019-09-29 05:43:42))

我已经在我的 web.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>

总体思路是我列出具有“餐厅”“角色”的用户 当我单击一个时,它会将我带到他们拥有的菜肴(即列出所有具有选定用户 ID 的菜肴),以及创建新菜肴的选项。

当我尝试创建一个新菜时,我输入了所有必要的数据并提交了表单,但我收到了标题中所示的错误消息。它表示dishs.user_id 为空,并将其显示为“?”。

这很奇怪,因为 POST 数据显示:

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

我一生都无法弄清楚问题所在,因此我们将不胜感激。

【问题讨论】:

  • $request-&gt;user 中有什么内容?我怀疑 user_id 设置不正确。
  • @Zeshan 我不太清楚你在问什么。

标签: sqlite laravel-5 controller


【解决方案1】:

在您的 PHP 控制器中,您使用的是 $request->user。我在您的 HTML 表单中没有看到。所以,如果你想添加当前用户。您可以使用身份验证。

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;

【讨论】:

  • 我现在得到 ``` 验证规则唯一需要至少 1 个参数。 ```
  • 是的,但是您的错误 NOT NULL 约束失败:dish.user_id 是关于 user_id。你没有定义。
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 2022-11-02
  • 2020-01-31
  • 2021-03-22
  • 2014-08-18
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多