2014-09-25 129 views
4

當我嘗試選擇加入與分頁查詢一些領域它顯示連接錯誤,如內存大小錯誤

Allowed memory size of 134217728 bytes exhausted (tried to allocate 45797376 bytes)

我的查詢是

$price_all = DB::table('model_price') 
      ->join('operator_model','model_price.model_id','=','operator_model.id') 
      ->join('operator_route','operator_model.operator_route_id','=','operator_route.id') 
      ->join('route', 'operator_route.route_id', '=', 'route.id') 
      ->join('operator', 'operator_route.operator_id', '=', 'operator.id') 
      ->select('model_price.id', 'model_price.price', 'route.route_name', 'operator.operator_name') 
      ->paginate(2); 

在我的數據庫只有5記錄被存儲。它不是大數據。

當我嘗試沒有分頁,然後它工作正常。像

$price_all = DB::table('model_price') 
       ->join('operator_model','model_price.model_id','=','operator_model.id') 
       ->join('operator_route','operator_model.operator_route_id','=','operator_route.id') 
       ->join('route', 'operator_route.route_id', '=', 'route.id') 
       ->join('operator', 'operator_route.operator_id', '=', 'operator.id') 
       ->select('model_price.id', 'model_price.price', 'route.route_name', 'operator.operator_name') 
       ->get(); 

現在我該如何優化這個查詢。

+1

您能否指定您在'paginate()'情況下使用的代碼來訪問視圖中的$ price_all變量? – matpop 2014-09-25 20:54:37

+2

我會建議你安裝https://github.com/barryvdh/laravel-debugbar,然後檢查顯示的查詢日誌。您可以通過計算分隔數除以加入的計數來大大提高查詢的質量,因爲您沒有使用where。然後使用Paginator :: make see docs創建尋呼機 – David 2014-10-08 12:20:05

回答

3

嘗試使用偏移量&限制而不是分頁。

$price_all = DB::table('model_price') 
       ->join('operator_model','model_price.model_id','=','operator_model.id') 
       ->join('operator_route','operator_model.operator_route_id','=','operator_route.id') 
       ->join('route', 'operator_route.route_id', '=', 'route.id') 
       ->join('operator', 'operator_route.operator_id', '=', 'operator.id') 
       ->select('model_price.id', 'model_price.price', 'route.route_name', 'operator.operator_name') 
       ->skip(0) 
       ->take(2) 
       ->get();