mysql - 如何返回商店评论大于或等于输入的所有商品 - Laravel 5.2

标签 mysql eloquent laravel-5

项目.php

class Item extends Model {

     public function shop()
     {
        // belongsTo and not belongsToMany since shops sell used goods, not new goods

        return $this->belongsTo('App\Shop');
     }
}

Shop.php

class Shop extend Model {

      public function reviews()
      {
          return $this->hasMany('App\Review');
      }

      public function getRating()
      {
           // I could also do $this->reviews->avg('rating');

           $reviews = $this->reviews->toArray();
           $reviews = array_column($reviews, 'rating');
           $reviews = array_sum($reviews);
           $rating  = round(($reviews / $this->reviews->count()));

           return $rating;
      }
}

我想用上面的代码做的是返回平均商店评论大于或等于给定输入的所有商品。例如,如果用户选择 5 颗星中的 3 颗星,则返回平均商店评论为 3 或更高的所有商品。我想退回商品,而不是商店。所以像

$input = request('input'); // ie: 3
Item::where(*average shop review*, '>=', $input)->get();

问候,

最佳答案

您可以尝试使用以下代码:

$items = Items::where($this->Shop->reviews->avg('rating'),'>',$input)
                ->get()->toArray();

获取商品数据和商店数据。

$items = Shop::where($this->reviews->avg('rating'),'>',$input)
               ->with('Item')->get()->toArray();

关于mysql - 如何返回商店评论大于或等于输入的所有商品 - Laravel 5.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38444037/

相关文章:

php - 日期等于或大于 DateTime 的 Laravel Eloquent

php - 优化使用三个表对列表进行排序的查询

php - Laravel Query Builder - 在生成的属性上使用 sum 方法

laravel - 如何在 Facebook TAB 上添加 Laravel Web 应用程序

mysql - READ UNCOMMITTED 与 FOR UPDATE 的替代方案

mysql - 如何使SQL脚本文件同时兼容MYSQL和MSSQL?

MYSQL UNION JOIN SUM(amount) 输出两个结果而不是一个

mysql - MySQL整数字段匹配字符串是怎么回事?

php - 使用 MySQL 进行 Laravel 5 服务 API 查询

php - Laravel 5.5 Eloquent 在多于 1 列的情况下变得不同