Laravel - оптимизировать функцию с помощью Query или Eloquent - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь найти способ оптимизировать эту функцию, потому что я волнуюсь, так как данные в БД увеличиваются, они станут очень медленными, но, будучи немного новичком ie с запросами к базе данных, я не так уверен, что то, что я хочу сделать, возможно, и если да, то как. Позвольте мне объяснить: я хочу получить все заказы из ресторана из таблицы заказов, объединяясь с таблицей пользователей, чтобы получить информацию о пользователе, а затем сгруппировать их по «времени получения», поэтому ответ выглядит следующим образом. Какие-нибудь указатели или идеи относительно того, как сделать это более эффективным? В любом случае я могу получить некоторые данные уже, как я хочу, с помощью запроса базы данных? Спасибо! Response image from postman

        $orders = DB::table('orders')->whereIn('dish_id', $restaurant->dishes->pluck('id')->toArray())
                    ->where('date', date('Y-m-d'))
                    ->join('users', 'orders.user_id', '=', 'users.id')
                    ->select('orders.id','orders.pick_up_time', 'users.name as user_name', 
                        'users.last_name as last_name','orders.status')
                    ->get();

        $pick_up_times = array_unique(self::whereIn('dish_id', $restaurant->dishes->pluck('id')->toArray())->pluck('pick_up_time')->toArray()); 

        $array_orders['total'] = count($orders);
        $array_orders['total_pending'] = 0;
        $array_orders['total_picked_up'] = 0;
        $array_order = [];

        foreach ($pick_up_times as $key => $pick_up_time) 
        {                 
            $pending_orders = [];
            $picked_up_orders = []; 

            foreach ($orders as $key => $order) 
            {
                if ($order->pick_up_time == $pick_up_time) 
                {
                    $array_order['pick_up_time'] = $pick_up_time;

                    if ($order->status == self::BOOKED) 
                    {
                        $pending_orders[] = $this->get_order_user_name_and_status($order);

                        $array_orders['total_pending']++;
                    }
                    else
                    {
                        $picked_up_orders[] = $this->get_order_user_name_and_status($order);

                        $array_orders['total_picked_up']++;
                    }
                }
            }
            $array_order['pending_orders'] = $pending_orders;
            $array_order['picked_up_orders'] = $picked_up_orders;
            $orders_by_hour[] = $array_order;
        }

        $array_orders['orders_by_hour'] = $orders_by_hour;

        return $array_orders;
    }

    private function get_order_user_name_and_status($order)
    {
        $order_formatted['id'] = $order->id;
        $order_formatted['name'] = $order->user_name.' '.$order->last_name;
        $order_formatted['status'] = $order->status;

        return $order_formatted;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...