Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel:cara mendapatkan rata-rata pada hubungan hasMany bersarang (hasManyThrough)

Anda memerlukan sesuatu seperti ini http://softonsofa.com/tweaking-eloquent-relations-how-to-get-hasmany-relation-count-efficiently/ hanya sedikit disesuaikan dengan kebutuhan Anda:

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

Maka sesederhana ini:

// 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mempartisi tabel miliar baris data sepak bola menggunakan konteks data

  2. Bagaimana Mengembalikan Tabel MySQL Tunggal Menggunakan mysqldump?

  3. Apa jenis hash yang digunakan mysql?

  4. Node Mysql async beberapa kueri

  5. ASP.Net / MySQL :Menerjemahkan konten ke dalam beberapa bahasa