我正在尝试使用Laravel 8为类似netflix的平台构建一个API;一切都运行得很完美,即使是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
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$actors = Actor::all();
return response()->json([
"data" => $actors,
"status" => Response::HTTP_OK
], Response::HTTP_OK);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
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);
}
/**
* Display the specified resource.
*
* @param \App\Models\Actor $actor
* @return \Illuminate\Http\Response
*/
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);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Actor $actor
* @return \Illuminate\Http\Response
*/
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);
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Actor $actor
* @return \Illuminate\Http\Response
*/
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函数中看到的,我尝试嵌套来自其他表的信息(具体地说,我创建了几个数据透视表来将数据绑定在一起)。例如,创建纪录片-演员透视表是为了将我的演员表和纪录片表绑定在一起。
我真的不能理解我做错了什么,我要提前感谢那些帮助我理解它的人。如果你需要(也许是为了更好地理解我的问题),我会立即附加其他文件。
问候
Alessandra
发布于 2021-05-12 16:52:37
当findOrFail
找不到模型时,它会抛出异常。您可以只使用find
方法,这样如果找不到模型,它将只返回null
。
另一个问题可能是您试图获取的角色丢失了。
/**
* Display the specified resource.
*
* @param \App\Models\Actor $actor
* @return \Illuminate\Http\Response
*/
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);
}
https://stackoverflow.com/questions/67499824
复制相似问题