2017-10-18 8 views
3

J'ai store tableau relatif à product table, qui ont product.rating (int) 1 à 5Laravel Eloquent Relation AVG ayant

Je veux trouver magasin qui ont note moyenne du produit 3 étoiles ou tout basé sur mes données post

mon code

$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; 

son retour toujours toutes les données comme son ignorer mon POST store-rating valeur

Voici mon modèle

<?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'); 
    } 


} 

Solution

comme réponse ci-dessous, je devrais utiliser groupBy et havingRaw pour faire le travail de recherche, mais il se avère ce n'est pas mon seul problème J'ai changé le code pour:

son semble que je ne peux pas utiliser $store = new Store; pour démarrer mon modèle requête

espère que cela peut aider les autres.

Répondre

1

Essayez d'utiliser havingRaw

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

ne pas oublier le groupe par