2016-01-07 63 views
1

我是Laravel的新手&雄辩。我的数据库中有用户,产品和投票表。用户可以投票(0-5)的产品,因此它是一个“多对多”的关系,与投票表像个支点:QueryBuilder:数据透视表的总和值

  • 用户:ID,姓名,电子邮件,密码
  • 产品:编号,名称,型号,品牌
  • 投票:USER_ID,PRODUCT_ID,投票

我映射这个模式是这样的:

// User model: 
public function product_votes() 
{ 
    return $this->belongsToMany('App\Product', 'votes')->withPivot('vote'); 
} 

// Product model: 
public function product_votes() 
{ 
    return $this->belongsToMany('App\User', 'votes')->withPivot('vote'); 
} 

所以乔hn可以在产品X上投5,在产品Y上投0。Bob可以在产品X上投2,在产品Y上投3,等等......

我想查询所有产品,的每一个人。例如:

SELECT p.*, (SUM(v.vote)/COUNT(*)) as votes FROM products p INNER JOIN votes v on v.product_id = p.id GROUP BY p.id 

我该怎么用QueryBuilder做到这一点?我的地图是正确的?

回答

1

下面将做的伎俩:

Product::select('products.*', DB::raw('SUM(vote)/COUNT(*) as votes')) 
->join('votes', 'votes.product_id', '=', 'products.id') 
->groupBy('products.id') 
->get(); 

你可以看到,通过调用toSql(运行查询)的代替的get()

+0

就是这样!感谢toSql()提示。 – aseolin