我是拉勒维尔的新手,口才十足。我的数据库上有用户、产品和投票表。用户可以在产品上投票(0比5),所以这是一种“多对多”的关系,选票表就像一个支点:
我像这样映射了这个模式:
// 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');
}所以约翰可以对产品X投5票,对产品Y投0票。鲍勃可以对产品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做到这一点呢?我的地图是对的?
发布于 2016-01-08 07:31:29
以下是其中的诀窍:
Product::select('products.*', DB::raw('SUM(vote)/COUNT(*) as votes'))
->join('votes', 'votes.product_id', '=', 'products.id')
->groupBy('products.id')
->get();您可以看到将通过调用toSql()而不是get()来运行的查询。
https://stackoverflow.com/questions/34662280
复制相似问题