Запрос PUT ресурса API Laravel 11. Нет результатов запроса для модели.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запрос PUT ресурса API Laravel 11. Нет результатов запроса для модели.

Сообщение Anonymous »

Я работаю над проектом API, использующим Laravel 11. Как уже упоминалось, когда я отправляю запрос PUT на определенные конечные точки, я получаю сообщение об ошибке:

"Нет результатов запроса для модели"

Ниже вы можете найти маршруты в коде api.php:

Код: Выделить всё

Route::prefix('area')->middleware('client')->group(function () {

Route::delete('country', [CountryController::class, 'destroyMultiple']);
Route::delete('city', [CityController::class, 'destroyMultiple']);
Route::delete('district', [DistrictController::class, 'destroyMultiple']);
Route::delete('neighborhood', [NeighborhoodController::class, 'destroyMultiple']);

Route::apiResource('country', CountryController::class);
Route::apiResource('city', CityController::class);
Route::apiResource('district', DistrictController::class);
Route::apiResource('neighborhood', NeighborhoodController::class);
});
Я получаю эту ошибку для каждого маршрута PUT, кроме маршрута CountryController PUT. Во-первых, это рабочая конечная точка в CountryController:

Код: Выделить всё

public function update(UpdateCountryRequest $request, Country $country)
{
DB::transaction(function () use ($request, $country) {
$country->update($request->only(['country_abbreviation', 'country_code', 'logo', 'status']));

$delete = [];

foreach ($request->languages as $language) {
$countryName = $country->CountryNames()->updateOrCreate([
'lang_id' => $language['lang_id'],
'country_id' => $country->id,
], $language);

$delete[] = $countryName->id;
}

CountryLanguage::where('country_id', $country->id)->whereNotIn('id', $delete)->delete();
});

return response()->json([
'message' => 'Country updated successfully',
'status' => 'success',
]);
}
А также файл UpdateCountryRequest, как показано ниже:

Код: Выделить всё

public function authorize(): bool
{
if ($this->user()->isAdmin) {
return true;
}

return false;
}

public function rules(): array
{
$country = $this->route('country');

return [
'country_abbreviation' => ['required', 'string', Rule::unique('countries')->ignore($country->id)], // keeping the same country_abbreviation seperately
'country_code' => ['required', 'string', 'max:5', Rule::unique('countries')->ignore($country->id)],
'logo' => ['required', 'string', 'max:255'],
'status' => ['required', 'boolean'],
'languages' => ['required', 'array'],
'languages.*.lang_id' => ['required', 'integer', 'exists:languages,id'],
'languages.*.country_name' => ['required', 'string'],
];
}
И запрос Postman PUT:
Изображение

Но для других контроллеров, когда я отправляю запрос PUT, я получаю упомянутую ошибку:

«Нет результатов запроса для модели»

Например, позвольте мне дать вам те же коды для DistrictController:
Обновить метот внутри файла контроллера:

Код: Выделить всё

 public function update(UpdateDistrictRequest $request, District $district)
{
DB::transaction(function () use ($request, $district) {
$district->update($request->validated());
});

return response()->json(['message' => 'District updated successfully'], 200);
}

Код: Выделить всё

UpdateDistrictRequest
код:

Код: Выделить всё

public function authorize(): bool
{
if ($this->user()->isAdmin) {
return true;
}

return false;
}

public function rules(): array
{
return [
'service_id' => 'required|integer',
'city_id' => 'required|integer|exists:cities,id',
'name' => 'required|string|max:255',
'status' => 'required|boolean',
];
}
А также PUT-запрос Postman:
[img]https://i.sstatic. net/ohDixxA4.png[/img]

Я проверил, существует ли район с данным идентификатором и существует ли он в базе данных.
Изображение

Ниже вы можете найти миграции:
Страна:

Код: Выделить всё

Schema::create('countries', function (Blueprint $table) {
$table->id();
$table->string('country_abbreviation');
$table->string('country_code');
$table->string('logo');
$table->tinyInteger('status');
$table->timestamps();
});
Район:

Код: Выделить всё

Schema::create('districts', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('service_id')->nullable();
$table->unsignedBigInteger('city_id');
$table->foreign('city_id')->on('cities')->references('id')->onDelete('cascade');
$table->string('name');
$table->boolean('status')->default(1);
$table->timestamps();
});
А также модели:
Страна:

Код: Выделить всё

use HasFactory;

protected $guarded = [];

protected $fillable = [
'country_abbreviation',
'country_code',
'logo',
'status'
];

// ... Relationship methods
Район:

Код: Выделить всё

protected $guarded = [];

protected $fillable = [
'service_id',
'city_id',
'name',
'status'
];

// ... Relationship methods
Когда я запускаю метод «route:list» с помощью artisan, я вижу правильно перечисленные все конечные точки.
Я пробовал изменить определения маршрутов внутри api.php. Например, перемещение строки DistrictCotroller вверх, но она по-прежнему выдает ту же ошибку, в то же время, когда я делаю этот запрос CountryController, все еще работает правильно.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -for-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»