简体   繁体   中英

Laravel Eloquent Relationship AVG having

I have store table related to product table, that have product.rating (int) 1 to 5

I want to find store that have average product rating 3 star or any based on my post data

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

its always return all data like its ignore my POST store-rating value

Here is my Model

<?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

as answered below I should be using groupBy and havingRaw to make the query work, but it turn out that is not my only problem in the code

I changed the code to:

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

its seem I cannot use $store = new Store; to start my model query

Hope this can help others.

Try using havingRaw

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

don't forget the group by

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM