отправить неправильный объект в коллекцию paginate laravel

Я использую приведенный ниже код для разбивки на страницы массива, поэтому для первой страницы все в порядке, и ответ отображается правильно, но для следующих страниц у меня проблема, в разбитом на страницы массиве добавьте ключ для каждого объекта, который мне не нужен это так как я могу это исправить?

      public function currentOrders(Request $request)
{
    $user = $request->user();
    $orders = Order::with('address','foods')->where(['order_status'=>0,'user_id' => $user->id])->get();
    $data=[];
    if (sizeof($orders)>0) {
        foreach ($orders as $order){
            $tmp['date'] = Jalalian::forge($order->created_at)->format('%B %d، %Y');
            $tmp['time'] = Jalalian::forge($order->created_at)->format('H:i');
            $tmp['total'] = $order->sum_price;
            $tmp['discount_pay'] = $order->price_off;
            $address = Address::withTrashed()->whereId($order->address_id)->first();

            $tmp['address'] = optional($address)->address;
            $tmp['foods'] = [];
            foreach ($order->foods as $food){
                $price = 0;
                $foodDetail = Article::withTrashed()->find($food->food_id);
                $products = OrderItem::with('product')->where(['order_id'=>$food->order_id,'food_id'=>$food->food_id])->get();
                $sec_tmp['products'] = [];
                foreach ($products as $product){
                    $third_tmp['product_name'] = $product->product->title;
                    $third_tmp['count'] = $product->count;
                    $product_price = ($product->product->price->price_off ? $product->product->price->price_off : $product->product->price->customer_price) * $product->count;
                    $third_tmp['price'] = $product_price;
                    $price += $product_price;
                    array_push($sec_tmp['products'] ,$third_tmp );
                }
                $sec_tmp['food_name'] = $foodDetail->title;
                $sec_tmp['food_count'] = $food->count;
                $sec_tmp['food_price'] = $price * $food->count;

                array_push($tmp['foods'],$sec_tmp);

            }
            array_push($data,$tmp);
        }
    }
    $data_collection = collect($data);
    $data_paginated = $this->paginate($data_collection);
    return response()->json(['orders'=>$data_paginated]);
}

public function paginate($items, $perPage = 2, $page = null, $options = [])
{
    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
    $items = $items instanceof Collection ? $items : Collection::make($items);
    return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}

мой текущий результат

      {
"orders": {
    "current_page": 1,
    "data": [
        {
            "date": "november 19، 2020",
            "time": "01:38",
            "total": 976400,
            "discount_pay": 926400,
            "address": "main st",
            "foods": [
                {
                    "products": [
                        {
                            "product_name": "oil",
                            "count": 3,
                            "price": 15000
                        },
                        {
                            "product_name": "egg",
                            "count": 5,
                            "price": 362000
                        },
                        {
                            "product_name": "fish",
                            "count": 1,
                            "price": 111200
                        }
                    ],
                    "food_name": "sosage",
                    "food_count": 2,
                    "food_price": 976400
                }
            ]
        },
        {
            "date": "november 19، 2020",
            "time": "01:43",
            "total": 976400,
            "discount_pay": 926400,
            "address": "main street",
            
        }
    ],
    "first_page_url": "/?page=1",
    "from": 1,
    "last_page": 2,
    "last_page_url": "/?page=2",
    "next_page_url": "/?page=2",
    "path": "/",
    "per_page": 2,
    "prev_page_url": null,
    "to": 2,
    "total": 4
}

}

но на следующих страницах у меня есть:

      {
"orders": {
    "current_page": 2,
    "data": {
        "1": {
            "date": "november 19، 2020",
            "time": "01:43",
            "total": 976400,
            "discount_pay": 926400,
            "address": "main st",
            "foods": [
                {
                    "products": [
                        {
                            "product_name": "egg",
                            "count": 3,
                            "price": 15000
                        },
                        {
                            "product_name": "oil",
                            "count": 5,
                            "price": 362000
                        },
                        {
                            "product_name": "fish",
                            "count": 1,
                            "price": 111200
                        }
                    ],
                    "food_name": "susage",
                    "food_count": 2,
                    "food_price": 976400
                }
            ]
        }
    },
    "first_page_url": "/?page=1",
    "from": 2,
    "last_page": 4,
    "last_page_url": "/?page=4",
    "next_page_url": "/?page=3",
    "path": "/",
    "per_page": 1,
    "prev_page_url": "/?page=1",
    "to": 2,
    "total": 4
}

}

В объекте данных есть такой ключ, как "1": {...}, и я хочу быть такой же, как первая страница, что мне делать?

1 ответ

$ data был массивом, но вы получаете объект с ключом 1. он выглядит как номер самой страницы. Но у вас должна быть коллекция $ temp в $ data;

Вы можете проверить, является ли $ data_paginated['data'] массивом, прежде чем возвращать return response()->json(['orders'=> $ data_paginated]);

Я думаю, что ошибка связана с $ this->paginate($data_collection), где $ data_collection - это коллекция элементов из списка $ temp. или может быть на сборе ($data). Я не вижу ошибок в другом месте.

Другие вопросы по тегам