在具有不同对象的单个数组中获取 API 响应

Posted

技术标签:

【中文标题】在具有不同对象的单个数组中获取 API 响应【英文标题】:Getting an API response in single array having different objects 【发布时间】:2021-04-01 19:20:42 【问题描述】:

我在数据数组中得到响应,然后每个对象数组都有不同的数组,但我只想要一个包含所有对象的数据数组。这是我的代码。首先,我获取产品,然后将它们的过滤结果存储在一个数组中,然后使该数组唯一,然后发送此响应。我也尝试过直接发送值,但它仍然有父数组和子数组。附上回复图片。

API Response

public function categoriesAndProducts(Request $request)
    
        $marketId = $request->marketId;
        try 
            $this->categoryRepository->pushCriteria(new RequestCriteria($request));
            $this->categoryRepository->pushCriteria(new LimitOffsetCriteria($request));
            $this->categoryRepository->pushCriteria(new CategoriesOfFieldsCriteria($request));
         catch (RepositoryException $e) 
            Flash::error($e->getMessage());
        
        $products = DB::table('products')->where('market_id', $marketId)->groupBy('category_id')->get();
        //  return $products;
        $arr = [];
        foreach ($products as $product) 
            $arr[] = $this->categoryRepository->where('id', $product->category_id)->get();
        
$values = array_unique($arr, SORT_REGULAR);
return $this->sendResponse($values, 'Categories retrieved successfully');

【问题讨论】:

【参考方案1】:

我通过在 Product 和 Category 模型中创建关系然后使用 with 附加数据找到了解决方案。

产品.php

public function category()

    return $this->belongsTo(\App\Models\Category::class, 'category_id', 'id');

Category.php

public function product()

        return $this->belongsTo(\App\Models\Product::class, 'category_id', 'id');

API控制器

$products = Product::where('market_id', $marketId)->where('deliverable', '!=', 0)->with('category')->groupBy('category_id')->get();
$categories = $products->pluck('category');
return $this->sendResponse($categories, 'Categories retrieved successfully');

【讨论】:

以上是关于在具有不同对象的单个数组中获取 API 响应的主要内容,如果未能解决你的问题,请参考以下文章

单个查询从具有不同列的多个表中获取记录

如何将这个Promise对象转换成具有结果的数组

如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值

如何从具有不同参数的单个端点获得多个响应?

具有不同响应的 Laravel api 方法

Java - 从列表/数组中的每个对象获取单个属性的最简单方法?