2017-10-18 25 views
3

を持つ私はproduct.rating(int)を持っているproductテーブルに関連store表、1私は私のポストデータに基づいて平均の製品評価の3つ星またはいずれかを持っている店を見つけたい Laravel雄弁関係AVGは

5を持っている

私のコード

$store = new Store; 
if ((int)$request->input('store-rating')>0) { 
    $store->whereHas('product',function($query) use($request) { 
     $rate = $request->input('product-rating'); 
     $query->where(DB::raw('AVG(rating)'),$rate); 
    }); 
} 
$store->with('product'); 
$thestore = $store->paginate(6); 

return $thestore; 

その常に私のPOSTを無視store-rating値のようなすべてのデータを返す

は、ここに私のモデル

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Builder; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\Scope; 
use Illuminate\Database\Eloquent\SoftDeletes; 
use Illuminate\Foundation\Auth\User as AuthUser; 
use Illuminate\Support\Facades\Auth; 
use App\ModelBuilder; 

class Store extends AuthUser 
{ 
    use SoftDeletes; 

    protected $guarded = []; 
    protected $dates = ['deleted_at']; 

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


} 

ソリューションです私は、クエリを動作させるためにgroupByhavingRawを使用する必要があります下に答えたが、それはそれはの私の唯一の問題ではありませんが判明するよう

コード

私は、コードを変更:

$store = Store::with('session'); 
if ((int)$request->input('store-rating')>0) { 
    $store->whereHas('product',function($query) use($request) { 
     $rate = $request->input('product-rating'); 
     $query->groupBy('rating')->havingRaw('AVG(rating) = '.$rate); 
    }); 
} 
$thestore = $store->paginate(6); 

return $thestore; 

その、私は私のモデルクエリー、これは他の人を助けることができる

希望を開始するために$store = new Store;を使用することはできませんように見えます。

答えて

1

havingRaw

$query->grouBy('rating')->havingRaw('AVG(rating) = '.$rate); 

してグループを忘れないでください使用してみてください