Маршруты PUT Laravel 8 возвращают 404

Я пытаюсь обновить данные в базе данных через API, но возвращает ошибку 404, не найденную в почтальоне.

api.php

    // PUT update citizen from NIC
Route::put('updateCitizen/{nic}',[CitizensController::class, 'updateCitizen'] );

controller.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Citizen as ModelsCitizen;
use DB;
use Illuminate\Support\Facades\DB as FacadesDB;

class CitizensController extends Controller
{
    public function updateCitizen(Request $request, $nic)
    {

        $citizen = FacadesDB::table('citizens')
            ->where('nic', '=', $nic)
            ->update(['options->enabled', true]);

        return response()->json($citizen);
    }
}

person lakindu kariyawasam    schedule 19.04.2021    source источник


Ответы (4)


Можете ли вы изменить маршрут API следующим образом?

Route::put('update-citizen/{nic}',[CitizensController::class, 'updateCitizen']);

и выполните следующую команду.

php artisan route:cache

и попробуйте использовать следующий URL - {baseUrl}/api/update-citizen/{an-existing-nic}

person Iyathurai Iyngaran    schedule 19.04.2021
comment
Я пытался . теперь это дает мне другую ошибку (500 Внутренняя ошибка сервера). Illuminate \ Database \ QueryException: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец '0' в 'списке полей' (SQL: обновление citizens set 0 = options - ›включен, 1 = 1, где nic = 970173099V) в файле - person lakindu kariyawasam; 19.04.2021
comment
Что-то не так с вашей этой строкой - - ›update (['options-› enabled', true]); Это может быть - ›update (['field_name', true]) ;. Убедитесь, что у вас есть поле в таблице базы данных. - person Iyathurai Iyngaran; 19.04.2021
comment
да @lyathurai ты был прав! Вот в чем проблема. Спасибо! - person lakindu kariyawasam; 19.04.2021

почему вы не используете подход к ресурсам api, похоже, гораздо быстрее писать в imo.

https://laravel.com/docs/8.x/eloquent-resources

В противном случае используйте больше 'LIKE' в качестве строкового оператора для предложения where

person JahStation    schedule 19.04.2021

Проблема заключалась в запросе на обновление. в запросе где,

->update(['options->enabled', true]);

должен быть изменен как,

    ->update($request->all());

чтобы обновить все vlaues в uri до столбцов базы данных.

person lakindu kariyawasam    schedule 19.04.2021

сверху вашего контроллера положите:

use Illuminate\Support\Facades\DB;

затем используйте:

$citizen = DB::table('citizens')
         ->where('nic',$nic)
         ->update(['options->enabled', true]);
person Ahsan Zaman    schedule 19.04.2021