2017-03-25 4 views
0
SELECT products.id, products.name, Count(order_product.product_id) 
FROM products INNER JOIN (orders INNER JOIN order_product ON orders.id = order_product.order_id) ON products.id = order_product.product_id 
GROUP BY products.id, products.name 
ORDER BY Count(order_product.product_id) DESC 

私は実際にモデルでそれを行う方法を理解することはできません。( '製品')とのlaravelの関連モデルでこの生のSQLクエリを実行することはできますか?

リターン注文:: - >(GET);コードイムのこの行は、この順で関連製品ですべての私の注文を取得した後、

が、私は唯一の順序でそれらにアクセスすることができ、私はI cantは、すべての注文のために次に何を意味する:

return Order::with('products')->//all()//->products()->get(); 

私にできること

return Order::with('products')->first()->products()->get() or 
return Order::with('products')->find($id)->products()->get(); 

しかし、私はすべての注文からすべての製品が必要です。

私は何か間違っているかもしれませんし、関連するモデルでこのクエリを実行するために上記で説明したことを行う必要はありませんか?このクエリの

結果は、(受注の最高周波数を持つ製品)最も売れる製品でなければなりません

+0

どのLaravelのバージョンを使用していますか? –

+0

私はlaravelを使用しています。5.2 – Batmannn

答えて

0

withCount()クエリビルダ方法は、おそらく最も簡単な方法です:私はDBを使用することをお勧めし

Product::withCount('orders')->orderBy('orders_count', 'desc')->get(); 
+0

ありがとうございました! – Batmannn

+0

注文数がゼロ以上の商品のみをどのようにフィルタリングできますか? これを試してみてください Product :: withCount(['orders' => function($ query){ $ query-> where( 'orders_count'、 '>' 0 '); }])> orderBy 'orders_count'、 'desc') - > get(); エラーが発生しました:c – Batmannn

+0

uhhhhhhh、代わりに - >問題を解決した場所の代わりに – Batmannn

0

より具体的な/複雑なクエリのための:: raw()

"use DB;"を忘れないでください。ファイルの先頭に!

$result = DB::raw("SELECT products.id, products.name, Count(order_product.product_id) 
FROM products INNER JOIN (orders INNER JOIN order_product ON orders.id = order_product.order_id) ON products.id = order_product.product_id 
GROUP BY products.id, products.name 
ORDER BY Count(order_product.product_id) DESC"); 
関連する問題