【问题标题】:Laravel API Resourse returning relation only on 'collection' methodLaravel API 资源仅在“收集”方法上返回关系
【发布时间】:2021-09-08 19:13:12
【问题描述】:

伙计们,我是 Laravel 的新手。我目前正在构建一个 API,并且我有几个端点(我们将讨论的一个是获取所有任务和获取单个任务)

问题在于,每当我调用 Get All Tasks 端点时,它都会返回任务资源 + 那里的用户资源。但是,当我调用 Get Single Task 端点时,它只会返回 TaskResource,而其中没有 User。有什么想法吗?

这里是资源的代码

class TaskResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'estimate' => $this->estimate,
            'status' => $this->status,
            'type' => $this->type,
            'user' => new UserResource($this->whenLoaded('user'))
        ];
    }
}

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'avatar' => $this->avatar,
            'tasks' => TaskResource::collection($this->whenLoaded('tasks'))
        ];
    }
}

这是我在控制器中获取任务的方法。 https://prnt.sc/16q0rlh

【问题讨论】:

  • 代码应该作为文本添加到这里,而不是场外截图。但是您是否看到with('user') 在您的actionGetTasks 上而不是在您的actionGetTask 上?这就是为什么
  • 谢谢!关于截图 - 好的,我会知道未来的:)

标签: php laravel api eloquent


【解决方案1】:

原因是我在控制器中的 'findOrFail' 之前缺少了 'with('user')' ->

/**
     * Description: Get single task
     * Method: GET
     * api/tasks/{id}
     * @param TaskRequest $request
     */
    public function actionGetTask(Request $request, $id) {
        try {
            return new TaskResource(Task::with('user')->findOrFail($request->route('id')));
        } catch (\Exception $ex) {
            return Response::json([
                'success' => false,
                'message' => 'There is no such id in the DB'
            ], 400);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 2020-05-09
    • 2021-11-09
    • 2022-07-26
    • 2021-10-15
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多