首页 > 解决方案 > 如何在从控制器返回之前将 Laravel 5.5 中的 API 资源类转换为数组?

问题描述

通常,在 Laravel 5.5 中,当使用 api 资源类时,您只需从控制器方法中返回资源类实例,如下所示:

public function show(Request $request, MyModel $model)
{
    return new MyModelResource($model);
}

在对客户端的响应中,这会将模型转换为数组(并最终转换为 json)。

但是......我试图弄清楚如何在从控制器方法返回之前将所有内容转换为数组。我试过这个:

public function show(Request $request, MyModel $model)
{
    $array = (new MyModelResource($model))->toArray($request);

    // ...
}

这里的问题是资源上加载的任何关系都不会转换为数组。它们在内部显示$array为资源类的实例。显然,toArray()手动调用不会导致递归调用,并且诸如此类的方法->whenLoaded('relationship_name')也没有得到真正的尊重。

那么如何让 Laravel 完成它所做的一切以递归方式将资源转换为数组,而不必从我的控制器方法中返回它呢?

标签: laravellaravel-5laravel-5.5

解决方案


我相信您正在寻找的是resolve资源类上的方法。见定义

从它的外观来看,它也应该处理将关系转换为数组。只要确保您正确地设置了资源关系


推荐阅读