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.