2013-10-24 31 views
13

में फ़ील्ड में ऑर्डर करने के लिए कैसे करें मैंने MYSQL में उत्पादों के लिए दृश्य तालिका में कुछ गणना की है, इसलिए मैं इन आईडी को उत्पाद संदर्भ आईडी के लिए सूचीबद्ध करता हूं।Laravel

$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id'); 

और मैं उन संदर्भ आईडी से उत्पाद प्राप्त करना चाहता हूं।

$products = Product::whereIn('id', $rederenceIds); 

उत्पाद सामग्री सही है, लेकिन आदेश गलत है, कैसे संदर्भ आईडी से उत्पाद आदेश लोड करने के लिए, मैं जानता हूँ कि मैं ORDER BY FIELD(id,' . $fields . ') का उपयोग करके MySQL में यह कर सकते हैं, लेकिन मैं Laravel तरीका पता लगाने के लिए चाहते हैं, और उम्मीद है कि ORDER BY FIELD कमांड का उपयोग न करें क्योंकि यह अधिक डेटाबेस दक्षता को अपशिष्ट लगता है।

+0

अंतिम परिणाम के रूप में, क्या आप उत्पादों या संदर्भ आईडी को ऑर्डर करने का प्रयास कर रहे हैं? –

+4

'ऑर्डरबी (डीबी :: कच्चा (' FIELD (आईडी, '। इंपोडोड (', ', $ productStarScoreIds)।') '),' एएससी ')', यह समाधान है, लेकिन मैं लैरावेल समाधान ढूंढना चाहता हूं अगर संभव हो तो। – Chan

उत्तर

0

सुनिश्चित नहीं हैं कि अगर मैं यह पूरी तरह समझते हैं, लेकिन यदि आप उत्पादों का आदेश दिया चाहते हैं तो आपको

$referenceIds = viewTable::lists('product_id'); 

$ordered_products = Product::whereIn('id', $rederenceIds)->orderBy('id', 'DESC')->get(); 
+0

मैं संदर्भ उत्पाद आईडी द्वारा आदेश देना चाहता हूं, परिणाम उत्पाद आईडी नहीं। – Chan

10

का उपयोग करना चाहिए आप कुछ कच्चे एसक्यूएल इंजेक्षन करना होगा, लेकिन यह एक बुरा सपना नहीं है:

$referenceIds = viewTable::orderBy('score', 'DESC')->lists('product_id'); 
$referenceIdsStr = implode(',', $referenceIds); 
$products = Product::whereIn('id', $rederenceIds)->orderByRaw(DB::raw("FIELD(product_id, $referenceIdsStr)"))->get()->all(); 
+4

यदि आप पहले से ही 'ऑर्डरब्राउ' का उपयोग कर रहे हैं, तो 'डीबी :: कच्चे' का उपयोग करने की आवश्यकता नहीं है। –

0

कुंजी primay कुंजी (मैं इस सवाल यह है में लगता है ...) है, तो आप इस कोशिश कर सकते हैं:

$products = Product::whereIn('id', $rederenceIds)->get(); 
$products = array_replace(array_flip($rederenceIds), $products->getDictionary()); 

आर esult ऐरे, संग्रह है।

मुझे नहीं पता कि इसमें दक्षता समस्या है या नहीं, लेकिन क्षेत्र द्वारा क्रम में अन्य समस्याएं हैं। उदाहरण के लिए, फ़ील्ड द्वारा ऑर्डर एसक्लाइट द्वारा समर्थित नहीं है, इसलिए यह इन-मेमोरी डेटाबेस के साथ परीक्षण में काम नहीं करता है।