Я пытаюсь найти способ оптимизировать эту функцию, потому что я волнуюсь, так как данные в БД увеличиваются, они станут очень медленными, но, будучи немного новичком ie с запросами к базе данных, я не так уверен, что то, что я хочу сделать, возможно, и если да, то как. Позвольте мне объяснить: я хочу получить все заказы из ресторана из таблицы заказов, объединяясь с таблицей пользователей, чтобы получить информацию о пользователе, а затем сгруппировать их по «времени получения», поэтому ответ выглядит следующим образом. Какие-нибудь указатели или идеи относительно того, как сделать это более эффективным? В любом случае я могу получить некоторые данные уже, как я хочу, с помощью запроса базы данных? Спасибо!
$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;
}