【问题标题】:Displaying single resource for specific user为特定用户显示单个资源
【发布时间】:2019-12-24 21:19:16
【问题描述】:

当对该路由 localhost:8000/api/user/{user}/reservations/{reservation} 发出 get 请求时,我想在 API 应用程序中为特定用户显示单个预订资源,然后用户应该能够查看预订的详细信息。

通过向localhost:8000/api/user/1/reservations/1 发出获取请求尝试进行测试,但没有返回任何内容。

这是应该返回预订的控制器方法

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

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

【问题讨论】:

  • 在返回之前尝试dd($reservedProduct)。如果它仍然为空,那么您的查询不正确。
  • 请出示路线声明。如果没有返回,则可能 auth()->user() 不等于 $user。试试 auth()->user()->id == $user->id
  • 您是否尝试在 if 之外返回一些东西以确保条件为真?
  • 请出示路线声明。
  • @dparoli 这是路由声明Route::get('user/{user}/reservations/{reservation}', 'ReservationController@showReservation')

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


【解决方案1】:

你不应该直接比较两个 eloquent 模型,如果你想检查它们是否是同一个模型,你可以检查 id 相等性:

if (auth()->user()->id == $user->id)

或者更好地使用is()函数:

if (auth()->user()->is($user))

更多型号对比可以在官方documentation阅读。

您的控制器函数没有返回任何内容,因为 if clause 始终是 false

【讨论】:

  • 感谢比较模型的课程。现在使用第二个选项并得到一个不同的错误消息ErrorException: Trying to get property &amp;#039;product&amp;#039; of non-object in file... 调查
  • 那么它是否解决了您原来的错误没有返回?
  • 是的...赞一个
【解决方案2】:

最终解决了它,结果证明解决方案是直截了当的。

所以首先我纠正了我比较 auth()-&gt;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]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2021-03-06
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多