显示特定用户的单个资源

时间:2019-08-19 16:07:59

标签: php laravel authentication laravel-5 laravel-5.8

当对此路由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]);
    }
}

谁能告诉我为什么我的代码不起作用?请记住,实际上是该用户制作的保留产品

2 个答案:

答案 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]);
}