猿问

如何从 laravel 的菜单中获取餐厅的平均价格?

如何获得餐厅的平均价格?查询时不执行循环


餐厅有很多菜单。菜单有很多费率。


在样板餐厅


public function menus()

{

    return $this->hasMany('App\Models\Menu', 'fk_restaurant');

}

在模型菜单中


public function reviews()

{

    return $this->hasMany('App\Models\Rate', 'fk_service');

}

RestaurantController 中的代码


$mostRatedRestaurants = Restaurant::where('status', 1)->with('menus')->get();

在添加问题之前我正在搜索但是当尝试任何解决方案时出现错误“调用 int 上的成员函数 addEagerConstraints()”


谢谢,高级。


喵喵时光机
浏览 96回答 2
2回答

慕姐8265434

你好,你能测试一下吗:$mostRatedRestaurants = Restaurant::App\Menu::find(1);$mostRatedRestaurants->where('status', 1)->get();问候

汪汪一只猫

解决了,谢谢各位。我是创建方法&nbsp; &nbsp; public function getAvgRate($mostRatedRestaurants){&nbsp; &nbsp; &nbsp; &nbsp; foreach ($mostRatedRestaurants as $mostRatedRestaurant){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $ratedRestaurant = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $countMenuHasRate = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $avgRateRestaurant = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($mostRatedRestaurant->menus as $menu){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // عدد تقييمات الوجبة&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $countReviewForMenu = count($menu->reviews);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $rate = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($menu->reviews as $reviews){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $rate += $reviews->rate;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(count($menu->reviews) !== 0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $rateForMenu = round($rate/$countReviewForMenu); // rate Menu;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $countMenuHasRate += 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $ratedRestaurant += $rateForMenu;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($ratedRestaurant !== 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $avgRateRestaurant = round($ratedRestaurant / $countMenuHasRate);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $mostRatedRestaurant['rate'] = $avgRateRestaurant ?? 0;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return $mostRatedRestaurants;&nbsp; &nbsp; } // End Method getAvgRate和内部方法索引$mostRatedRestaurants = Restaurant::where('status', 1)->with('profileImage', 'menus')->get();$mostRatedRestaurants = $this->getAvgRate($mostRatedRestaurants); // Add Rate$mostRatedRestaurants = $mostRatedRestaurants->sortByDesc('rate')->take('9'); // Sort Ratereturn view('user.content.restaurant.index', compact('mostRatedRestaurants'));在刀片中 用于回波率@php&nbsp; &nbsp; $rate = 5 - $mostRatedRestaurant->rate;@endphp@for ($i = 1; $i <= $rate; $i++)&nbsp; &nbsp; <li class="far fa-star text-secondary float-left text-left"></li>@endfor@php&nbsp;&nbsp; $rate = $mostRatedRestaurant->rate;@endphp@for ($i = 1; $i <= $rate; $i++)&nbsp; &nbsp; <li class="fa fa-star"></li>@endfor你可以改进代码再次感谢。
随时随地看视频慕课网APP
我要回答