Почему я получаю поле имени обязательно, при попытке обновления через api в laravel, похоже, оно не принимает мои данные - PullRequest
1 голос
/ 09 февраля 2020

Это моя функция обновления, я использую почтальон для проверки API, Мой URL-адрес: http://localhost: 8000 / api / userregister / 25 25 - это идентификатор пользователя, которого я пытаюсь обновить. Я отправляю запрос PUT

Я получаю этот ответ:

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: update `users` set `name` = ?, `email` = ?, `phone` = ?, `users`.`updated_at` = 2020-02-09 16:39:43 where `id` = 25) in file C:\xampp\htdocs\doc\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 669



public function update(Request $request, $id)
{
    // $validator = Validator::make($request->all(), [
    //     'name' => 'required|string|max:255',
    //     'email' => 'required|string|email|max:255|unique:users',
    //     'password' => 'required|string|min:6|confirmed',
    //     'phone' => 'required|string|min:6',
    //     'Age' => 'required|string',
    //     'Blood' => 'string',
    //     'Gender' => 'required|string',
    //     'Height' => 'string',
    //     'Weight' => 'string',
    //     'record' => 'string'
    // ]);

    // if($validator->fails()){
    //         return response()->json($validator->errors()->toJson(), 400);
    // }

    $doc = User::find($id);

    if($request->hasFile('picture')){
        // Get filename with the extension
        $filenameWithExt = $request->file('picture')->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('picture')->getClientOriginalExtension();
        // Filename to store
        $fileNameToStore= $filename.'_'.time().'.'.$extension;
        // Upload Image
        $path = $request->file('picture')->storeAs('public/images', $fileNameToStore);
    } else {
        $fileNameToStore = 'noimage.jpg';
    }

    $doc->name = $request->input('name');
      $doc->email = $request->input('email');
      $doc->phone = $request->input('phone');
      if($request->hasFile('picture')){
        $doc->picture = $bannerName;
        }



       $doc->save();

    return response()->json([
        'message' => 'Success',

    ]);

}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Если вы отправляете multipart/formdata в запросе PUT, он не будет работать, поскольку HTML формы поддерживают только GET и POST.

У вас есть два варианта:
Любая отправка Content-Type: application/json в Запрос PUT

Или

Отправка данных формы в запросе POST с дополнительным полем: _method : PUT.

0 голосов
/ 09 февраля 2020

Вы можете исправить это с помощью

  1. Установка для столбца 'name' значения Nullable в вашей базе данных
  2. Создание обязательного атрибута 'name' attr
  3. Просто используйте $doc->name = $request->input('name') ?? '';
...