2016-08-24 18 views
1

私は合計数を数える必要があります。グループでデータベースから来るレコードの数。私は、デフォルトで各セットまたは何グループのカウントを必要としません。Laravel 5 - 結合とグループで合計レコードを数える方法

私が知っている1つの方法は、クエリでget()を使うことですが、データベースにたくさんのレコードがあるとクラッシュします。私のコメントから

 $orders = Order::where('orders.store_id', $store->id); 
     $orders->join('order_product', 'orders.id', '=', 'order_product.order_id'); 
     $orders->join('products', 'products.id', '=', 'order_product.product_id'); 
     $orders->join('customers', 'order_product.order_id', '=', 'customers.order_id'); 
     $orders->join('addresses', 'customers.id', '=', 'addresses.customer_id'); 
     $orders->where('products.status', 1); 
     $orders->where('orders.is_deleted', '0'); 

     if ($keyword) { 
      $orders->where(function ($query) use ($keyword, $searchKeyword){ 
       $query->where('products.title', 'LIKE', $searchKeyword) 
         ->orWhere('orders.order_name', 'LIKE', $searchKeyword); 

       if (strtolower($keyword) == 'enabled') { 
        $query->orWhere('orders.status', '=', 1); 
       }elseif (strtolower($keyword) == 'disabled') { 
        $query->orWhere('orders.status', '=', 0); 
       } 

       return $query; 
      }); 
     } 

     $orders->groupby('orders.id'); 

     // Total orders 
     $totalOrders = count($orders->get()); 

     $orders->orderBy($orderBy, $orderDirection)->skip($startFrom)->take($itemsPerPage); 
     $orders = $orders->select([ 
      'orders.id', 
      'orders.order_name', 
      'products.title', 
      'products.handle', 
      'products.id as product_id', 
      'orders.status' 
     ])->get(); 
+0

合計レコードを取得するために2つの別々のクエリを実行する必要があります –

+0

'$ orders'をページ付けすると仮定します。 '$ order-> skip() - > take() - > get()'の代わりに '$ orders-> paginate($ itemsPerPage)'を試しましたか? 'paginate()'は既にコレクションを返します。 – Skysplit

+0

はい、ページネーションが必要です。私はページングのためにjqueryのdataTableを使用しています。ページングで可能ですか? –

答えて

1

コピー:

私はあなたが$ordersをページ付けするとします。

$orders->paginate($itemsPerPage) 

Model::get()はあなたのコレクションのインスタンスを与えるのでModel::paginate()戻りLengthAwarePaginatorしているときに、

$orders->skip($startFrom)->take($itemsPerPage)->get(). 

若干の違いがありますと同じ結果を強要与えます。ただし、両方を反復処理することはできます。
laravel docsのPaginationをご覧ください。ここで

0

は@Skysplit助けを借りて、私の更新されたコードです:

 // Get orders 
     $orders = $store->orders(); 

     $orders->join('order_product', 'orders.id', '=', 'order_product.order_id'); 
     $orders->join('products', 'products.id', '=', 'order_product.product_id'); 
     $orders->join('customers', 'order_product.order_id', '=', 'customers.order_id'); 
     $orders->join('addresses', 'customers.id', '=', 'addresses.customer_id'); 
     $orders->where('products.status', 1); 
     $orders->where('orders.is_deleted', '0'); 

     if ($keyword) { 
      $orders->where(function ($query) use ($keyword, $searchKeyword){ 
       $query->where('products.title', 'LIKE', $searchKeyword) 
         ->orWhere('orders.order_name', 'LIKE', $searchKeyword); 

       if (strtolower($keyword) == 'enabled') { 
        $query->orWhere('orders.status', '=', 1); 
       }elseif (strtolower($keyword) == 'disabled') { 
        $query->orWhere('orders.status', '=', 0); 
       } 

       return $query; 
      }); 
     } 

     $orders->groupby('orders.id'); 

     $orders->orderBy($orderBy, $orderDirection); 
     $orders = $orders->select([ 
      'orders.id', 
      'orders.order_name', 
      'products.title', 
      'products.handle', 
      'products.id as product_id', 
      'orders.status' 
     ])->paginate($itemsPerPage); 

     // Total orders 
     $totalOrders = $orders->total(); 

それが誰かを助ける願っています。

関連する問題