使用laravel一次调用即可获得多个API资源

时间:2018-11-22 09:58:51

标签: laravel laravel-5 laravel-resource

我正在使用laravel的API资源将资源转换为用于API调用的数组,并且其工作正常,是否有可能在一次调用中检索多个模型的数据?为了获得用户的JSON数据以及Pages JSON?或者我需要为此单独打电话。

这是我到目前为止尝试过的

//Controller
public function index(Request $request)
{
    $users = User::all();
    $pages = Page::all();
    return new UserCollection($users);
}

//API Resource
public function toArray($request)
    {
        return [
            'name' => $this->name,
            'username' => $this->username,
            'bitcoin' => $this->bitcoin,
        ];
    }

任何帮助都会得到高度重视

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

public function index(Request $request)
{
    $users = User::all();
    $pages = Page::all();
    return new response()->json([
        'users' => new UserCollection($users),
        'pages' => new PageCollection($pages),
    ]);
}

答案 1 :(得分:0)

我正在使用laravel 6.x,而且我不知道laravel在转换响应或执行某项操作,但是我在以下情况下也JSON 的形式获取响应:

class HomeController extends Controller
{
    public function index()
        {
            return [
                'advertisements' => new AdvertisementCollection(Advertisement::latest()->get()),
                'banners' => new BannerCollection(Banner::latest()->get()),
                'sliders' => new SliderCollection(Slider::latest()->get())
                ];
        }
}

答案 2 :(得分:0)

laravel 6 ..

如果您喜欢以下内容,这应该可以100%起作用,您实际上是在帮助我解决我遇到的问题,这是对这个偏爱的回报:3。 更改以下内容:

'advertisements' => AdvertisementCollection::collection(Advertisement::latest()->get())



class HomeController extends Controller
{
    public function index()
        {
           $ads = Advertisement::latest()->get();
           $banners = Banner::latest()->get();
           $sliders = Slider::latest()->get()
            return [
                'advertisements' => AdvertisementCollection::collection($ads),
                'banners' => BannerCollection::collection($banners),
                'sliders' => SliderCollection::collection($sliders),
                ];
        }
}

到 (将使用可变的或仅用于海峡数据库查询)

Internet Explorer