2017-11-13 62 views
6

मैं उत्पाद id जिसके खिलाफ मैं मॉडल संग्रह पुनः प्राप्त करने की जरूरत है की एक सरणी है करने के लिए। सरणी इस तरह कुछ है:Laravel: कैसे कस्टम अनुसार क्रमबद्ध वाक्पटु संग्रह का उपयोग करके जिसमें विधि

$ids = array(9, 2, 16, 11, 8, 1, 18); 

अभी, मैं संग्रह प्राप्त करने के लिए कोड की निम्न पंक्ति का उपयोग कर रहा हूं।

$products = Product::whereIn('id', $ids)->get(); 

लेकिन यह उनके आईडी के खिलाफ उत्पादों को टाइप करता है। जैसे: 1, 2, 8, 9, 11, 16, 18। क्या मैं जरूरत 9, 2, 16, 11, 8, 1, 18 यानी $ids सरणी में के रूप में ही आदेश है।

क्या मैं सरणी में के रूप में एक ही क्रम पाने के लिए क्या करना चाहिए?

+0

यह एक दिलचस्प सवाल है। मैं कहूंगा कि असुरक्षित से अधिक कस्टम प्रकार है, हालांकि। –

+1

मुझे लगता है कि इसके लिए मुझे एक डुप्लिकेट मिला है: https://stackoverflow.com/questions/40731863/sort-collection-by-custom-order-in-eloquent –

+0

मैं आपके प्रश्न को डुप्लिकेट के रूप में बंद नहीं करना चाहता उसमें से अभी तक क्योंकि मैं 100% निश्चित नहीं हूं कि आप यही चाहते हैं। क्या उत्तर आपकी समस्या का समाधान करता है? –

उत्तर

8

उपयोग Field()

$products = Product::whereIn('id', $ids) 
    ->orderBy(DB::raw("FIELD(id,".join(',',$ids).")")) 
    ->get(); 

Field() रिटर्न अल्प विराम द्वारा सीमांकित सूची

+1

ओह, यह करने का एक चालाक तरीका है। मुझे वह याद रखना होगा। –

+1

ग्रेट! यह एक दिलचस्प और साफ दृष्टिकोण है। धन्यवाद। –

1

यहाँ के सूचकांक स्थिति की तरह mysql के समारोह (आप mysql डेटाबेस का उपयोग कर रहे हैं, तो) laravel कुछ की DB::raw() साथ ऐसा करने का एक और तरीका।

$ids = array(9, 2, 16, 11, 8, 1, 18); 
$products = User::whereIn('id', $ids)->orderByRaw('FIELD(id, '.implode(',', $ids).')')->get(); 
संबंधित मुद्दे