首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QueryBuilder:枢轴表的和值

QueryBuilder:枢轴表的和值
EN

Stack Overflow用户
提问于 2016-01-07 18:14:23
回答 1查看 488关注 0票数 1

我是拉勒维尔的新手,口才十足。我的数据库上有用户、产品和投票表。用户可以在产品上投票(0比5),所以这是一种“多对多”的关系,选票表就像一个支点:

  • 用户: id,姓名,电子邮件,密码
  • 产品: id、名称、型号、品牌
  • 投票: user_id,product_id,投票

我像这样映射了这个模式:

代码语言:javascript
复制
// 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票,等等。

我试着询问所有的产品,每种产品的得票数之和。类似于:

代码语言:javascript
复制
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做到这一点呢?我的地图是对的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 07:31:29

以下是其中的诀窍:

代码语言:javascript
复制
Product::select('products.*', DB::raw('SUM(vote)/COUNT(*) as votes'))
->join('votes', 'votes.product_id', '=', 'products.id')
->groupBy('products.id')
->get();

您可以看到将通过调用toSql()而不是get()来运行的查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34662280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档