Я пытаюсь создать API для платформы, подобной netflix, с использованием Laravel 8; все работает отлично, даже петиции в postman. Единственная проблема, с которой я сталкиваюсь, это нахождение петиции через id; так, например, один из моих маршрутов: http://127.0.0.1:8000/api/actors, и если я пытаюсь подать петицию, используя метод get, на http://127.0.0.1:8000/api/actors/ 1 Postman возвращает мне ошибку, которая, на мой взгляд, зависит от того, как я вложил информацию в свой файл ActorController. Поэтому я хотел попросить вас взглянуть на мой файл ActorController:
<?php
namespace App\Http\Controllers;
use App\Models\Actor;
use App\Models\Documentaryactor;
use App\Models\Fictionactor;
use App\Models\Kidactor;
use App\Models\Movieactor;
use App\Models\Originalactor;
use App\Models\Otheractor;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ActorController extends Controller {
public function index() {
$actors = Actor::all();
return response()->json([
"data" => $actors,
"status" => Response::HTTP_OK
], Response::HTTP_OK);
}
public function store(Request $request) {
$actor = Actor::create($request->all());
return response()->json([
"message" => "Actor has been successfully created",
"data" => $actor,
"status" => Response::HTTP_CREATED,
], Response::HTTP_CREATED);
}
public function show(Actor $actor) {
$movieactor = Movieactor::findOrFail($actor->idMovie);
$fictionactor = Fictionactor::findOrFail($actor->idFiction);
$documentaryactor = Documentaryactor::findOrFail($actor->idDocumentary);
$kidactor = Kidactor::findOrFail($actor->idKid);
$originalactor = Originalactor::findOrFail($actor->idOriginal);
$otheractor = Otheractor::findOrFail($actor->idOther);
return response()->json([
"actor" => $actor,
"movieactor" => $movieactor,
"fictionactor" => $fictionactor,
"documentaryactor" => $documentaryactor,
"kidactor" => $kidactor,
"originalactor" => $originalactor,
"otheractor" => $otheractor,
"status" => Response::HTTP_OK,
], Response::HTTP_OK);
}
public function update(Request $request, Actor $actor) {
$actor->update($request->all());
return response()->json([
"message" => "Actor has been successfully updated",
"data" => $actor,
"status" => Response::HTTP_OK,
], Response::HTTP_OK);
}
public function destroy(Actor $actor) {
$actor->delete();
return response()->json([
"message" => "Actor has been successfully deleted",
"data" => $actor,
"status" => Response::HTTP_OK,
], Response::HTTP_OK);
}
}
Как вы видите в функции show, я попытался вложить информацию, поступающую из других моих таблиц (в частности, я создал несколько сводных таблиц для связывания данных). Например, сводная таблица актеров документальных фильмов была создана, чтобы связать вместе мою таблицу актеров и мою таблицу документальных фильмов.
Я действительно не могу понять, что делаю не так, и заранее благодарю всех, кто поможет мне понять это.
Ответ 1
findOrFail выбрасывает исключение, когда не находит модель. Вы можете просто использовать метод find так, чтобы он просто возвращал null, если модель не найдена.
Другая проблема может заключаться в том, что агент, которого вы пытаетесь получить, отсутствует.
public function show(Actor $actor) {
$movieactor = Movieactor::find($actor->idMovie);
$fictionactor = Fictionactor::find($actor->idFiction);
$documentaryactor = Documentaryactor::find($actor->idDocumentary);
$kidactor = Kidactor::find($actor->idKid);
$originalactor = Originalactor::find($actor->idOriginal);
$otheractor = Otheractor::find($actor->idOther);
return response()->json([
"actor" => $actor,
"movieactor" => $movieactor,
"fictionactor" => $fictionactor,
"documentaryactor" => $documentaryactor,
"kidactor" => $kidactor,
"originalactor" => $originalactor,
"otheractor" => $otheractor,
"status" => Response::HTTP_OK,
], Response::HTTP_OK);
}
Web