2017-07-27 86 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()'效率較低。無論如何,這可能沒有問題,但你需要測試一下。自定義分頁符在官方文檔中有記錄 –