sql >> データベース >  >> RDS >> Mysql

Laravel:ネストされたhasManyリレーションシップ(hasManyThrough)の平均を取得する方法

    このようなものが必要です http://softonsofa.com/tweaking-eloquent-relations-how-to-get-hasmany-relation-count-efficiently/ ニーズに合わせてわずかに調整:

    public function reviewRows()
    {
        return $this->hasManyThrough('ReviewRow', 'Review');
    }
    
    public function avgRating()
    {
        return $this->reviewRows()
          ->selectRaw('avg(rating) as aggregate, product_id')
          ->groupBy('product_id');
    }
    
    public function getAvgRatingAttribute()
    {
        if ( ! array_key_exists('avgRating', $this->relations)) {
           $this->load('avgRating');
        }
    
        $relation = $this->getRelation('avgRating')->first();
    
        return ($relation) ? $relation->aggregate : null;
    }
    

    次に、これと同じくらい簡単です:

    // eager loading
    $products = Product::with('avgRating')->get();
    $products->first()->avgRating; // '82.200' | null
    
    // lazy loading via dynamic property
    $product = Product::first()
    $product->avgRating; // '82.200' | null
    


    1. Google AppEngineとCloudSQL:「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました

    2. グループコンキャットの結果がカットオフ

    3. Symfony 2.0でデータベースをpostgresqlに変更するにはどうすればよいですか?

    4. PostgreSQLで短い日の名前を取得する