2017-07-27 73 views
-1

我试图分页搜索,以带回18页的页面。以前我有这个代码工作代码:分页会产生一个错误

$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average'))->groupBy('id')->orderBy('ratings_average', 'DESC'); 

我就PAGINATE添加到该如图所示的文档

$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average'))->groupBy('id')->orderBy('ratings_average', 'DESC')->paginate(18); 

,并得到一个错误

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in group statement is ambiguous 

如何分页任何想法该声明?

+0

不,不,不...使用适当的关系和热切的加载。你正在推翻整个事情。 – Frondor

回答

0

这不是导致问题的分页,错误是由您的小组引起的。

您应该将之前的ID EG表名/别名:

$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average'))->groupBy('product.id OR reviews.id')->orderBy('ratings_average', 'DESC'); 

请参见上面的ammended说法,请注意复制粘贴它不会工作,你会看到更改groupby参数。

你也应该访问关于雄辩的文档,你已经以一种与你相抗衡的方式来处理这个问题。我建议对所用的ORM进行更严格的控制。

祝你好运!

+0

该组由作品没有分页,所以它肯定是错误的提示。 – detinu20

0

错误是相当自我解释在这里:

Column 'id' in group statement is ambiguous 

,所以你需要做

`groupBy('id')` 

更明确,告诉它id(从哪个表,在查询中使用的每个表功能id列)您想要用于分组。

+0

“目前,使用groupBy语句的分页操作无法由Laravel高效执行,如果您需要将groupBy与分页结果集一起使用,建议您查询数据库并手动创建分页程序。”从文档中提取。我将如何做到这一点? – detinu20

+0

这并不意味着它不工作,但它没有使用'groupBy()'效率较低。无论如何,这可能没有问题,但你需要测试一下。自定义分页符在官方文档中有记录 –