当对此路由get
发出localhost:8000/api/user/{user}/reservations/{reservation}
请求时,我想在API应用程序中为特定用户显示单个保留资源,然后该用户应该能够查看保留的详细信息制成。
通过向localhost:8000/api/user/1/reservations/1
发出get请求尝试了测试,但未返回任何内容。
这是应该返回预订的控制器方法
<?php
namespace App\Http\Controllers;
use App\User;
use App\Reservation;
...
public function showReservation(User $user, Reservation $reservation)
{
if (auth()->user() == $user) {
$reservedProduct = new ReservationResource(Reservation::where('user_id', $user->id)->where('id', $reservation->id)->first());
return response()->json(['reservation' => $reservedProduct]);
}
}
谁能告诉我为什么我的代码不起作用?请记住,实际上是该用户制作的保留产品
答案 0 :(得分:1)
您不应直接比较两个雄辩的模型,如果要检查它们是否是同一模型,可以检查id
是否相等:
if (auth()->user()->id == $user->id)
或者甚至更好地使用is()
函数:
if (auth()->user()->is($user))
您可以在官方documentation中阅读更多模型比较信息。
您的控制器功能未返回任何内容,因为if clause
始终为false
。
答案 1 :(得分:-1)
最终解决了这个问题,事实证明解决方案是直接的。
因此,我首先纠正了比较auth()->user()
和$user
的方式。
然后,由于我一直在寻找其ID已经在localhost:8000/api/v1/user/{user}/reservations/{reservation}
这样的路由中传递过的预订的单个实例,因此我只需要在资源中传递预订,而不查询我在做什么。
解决方案代码为
if (auth()->user()->is($user)) {
$reservedProduct = new ReservationResource($reservation);
return response()->json(['reservation' => $reservedProduct]);
}