首页 > 解决方案 > 拉拉维尔 | groupBy 作为对象返回

问题描述

我正在尝试使用 Laravel 集合将 agroupBy作为数组返回。但是,无论如何,它似乎总是作为对象返回。我试过这样做$posts->groupBy('category')->toArray(),但这似乎仍然作为一个对象返回。我也尝试过$posts->groupBy('category')->all(),但它仍然作为对象返回。

我不知道这是否与 Laravel 在路由中返回方法有关,但我需要它作为数组返回。

这是代码:

public function getFeatures($id)
{
    return Feature::query()->get()->groupBy('category')->toArray();
}

实际代码工作正常,我得到了结果,但它似乎并没有转换为数组。谢谢。

标签: laraveleloquent

解决方案


当使用 Eloquent 进行查询以获取(可能)多个项目时,Laravel 将始终返回包含所有模型对象的Collection类的实例。如果您需要将它们转换为数组以在视图中使用它们,您可以compact使用元素。compact将创建集合元素的关联数组:

public function getFeatures($id)
{
    $features = Feature::all();

    return view('my_cool_view', compact($features));
}

另一方面,如果您需要将它们转换为数组以通过 API 返回它们,Laravel 默认将响应转换为 JSON:

public function getFeatures($id)
{
    return Feature::all();
}

现在,如果您需要将集合转换为数组,请按照toArray()您的指示使用:

public function getFeatures($id)
{
    $collection_of_features = Feature::all();

    $array_of_features = $collection_of_features->toArray();

    // use it for wherever you want.

}

推荐阅读