laravel 如何优化一个表中的简单 where 查询

我有一个简单的 where 查询,它在 foreach 中重复了一段时间,实际上可能很多,所以这是我的查询:


    for ($i = 0; $i < count($hasdate); $i++) {

        $roomprice = RoomPricingHistory::

             Where('accommodation_room_id', $hasroom[$i])

            ->where('from_date', '<=', $hasdate[$i])

            ->where('to_date', '>=', $hasdate[$i])

            ->get()->sortBy('created_at');


        $lastget = last($roomprice);

        $last_price = last($lastget);

        if ($last_price) {

            $final_price[] = $last_price->sales_price;

        } else {

            $has_not_capacity = $hasdate[$i];

        }

    }

所以每次运行它在望远镜中大约需要 2,509.10 毫秒,这是望远镜向我显示的作为在表上运行的查询的内容


  select

  *

from

  `room_pricing_histories`


    where

      `accommodation_room_id` = 3

      and `from_date` <= "2019-06-01 09:00:00"

      and `to_date` >= "2019-06-01 09:00:00"

那么关于如何优化此查询的任何想法?


猛跑小猪
浏览 115回答 1
1回答

慕娘9325324

好吧,根据经验 - 不要在循环内运行查询。您可以whereIn()用于查询多个 ID$roomIds = $hasroom // assume this has array of ids$roomprice = RoomPricingHistory::&nbsp; &nbsp; &nbsp; &nbsp; whereIn('accommodation_room_id', $roomIds)&nbsp; &nbsp; &nbsp; &nbsp; ->where('from_date', '<=', $fromDate)&nbsp; &nbsp; &nbsp; &nbsp; ->where('to_date', '>=', $toDate)&nbsp; &nbsp; &nbsp; &nbsp; ->get()->sortBy('created_at');
打开App,查看更多内容
随时随地看视频慕课网APP