2016-02-08 15 views
6

से मिलता है मैं इस-Laravel 5.2 - परिवर्तन डाटा प्रारूप सुवक्ता

$feature_project = FeatureProject::select('feature_id') 
         ->where('project_id', $project->id) 
         ->get(); 

की तरह एक मॉडल है और अगर मैं इसे वापस, मैं इस-

[ 
    { 
    "feature_id": 2 
    }, 
    { 
    "feature_id": 4 
    }, 
    { 
    "feature_id": 9 
    } 
] 

की तरह एक उत्पादन हो रही है लेकिन मैं चाहता हूँ टी आउटपुट इस तरह-

[2,4,9] 

इसलिए मुझे आउटपुट को कनवर्ट करने की आवश्यकता है।

लेकिन मैं के लिए-प्रत्येक पाश का उपयोग किए बिना एक तरह से नहीं मिल रहा है (एक अस्थायी सरणी बनाने के लिए, एक के लिए-प्रत्येक पाश के साथ वर्तमान सरणी से कि सरणी के सभी तत्वों को धक्का)।

लेकिन मुझे लगता है कि लार्वेल में ऐसा करने के लिए उससे अधिक स्मार्ट तरीका है।

मुझे लगता है कि इस उद्देश्य के लिए लैरवेल संग्रह का उपयोग किया जाता है।

+0

क्या आपने PHP json_decode() को आजमाया था? मुझे लगता है कि इस '[{"feature_id": 2}, {"feature_id": 4}, {"feature_id": 9}] को परिवर्तित करना चाहिए ['4,4,9]' – Michel

+0

@ मिशेल एलोक्वेंट एक रिटर्न देता है संग्रह। यह केवल प्रतिक्रिया में जेसन के लिए एन्कोड किया गया है। – Kaspars

उत्तर

4

आप क्वेरी बिल्डर पर pluck() विधि कॉल कर सकते हैं।

$feature_project = FeatureProject::select('feature_id') 
             ->where('project_id', $project->id) 
             ->pluck('feature_id'); // [2,4,9] 

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_lists

वैकल्पिक रूप से, आप कच्चे सरणियों के लिए PHP के array_column() फ़ंक्शन का उपयोग कर सकते हैं। http://php.net/manual/en/function.array-column.php

+0

-> प्लक ('feature_id'); इसके लिए किसी भी अन्य विकल्प से बेहतर है, लेकिन सूचियां भी एक अच्छा जवाब है। लेकिन सूचियों() को लार्वेल 5.3 से हटा दिया जाएगा, इसलिए प्लक सबसे अच्छा जवाब है –

+0

@AbrarJahin जानकारी के लिए धन्यवाद, मैंने अपना जवाब संपादित किया। – Kaspars

0

एक वैकल्पिक तरीका भी कुछ मामलों में उपयोगी होगा। हम select फ़ंक्शन के अंदर raw क्वेरी चला सकते हैं।

$feature_project = FeatureProject::select(DB::raw('GROUP_CONCAT("feature_id"))) 
        ->where('project_id', $project->id) 
        ->get(); 

DB::raw में हम समारोह और मामले mysql क्वेरी के रूप में ही साथ mysql क्वेरी चला सकते हैं: यहाँ एक उदाहरण है।

+0

कहने के लिए खेद है, यह गलत जवाब है –

+0

मई मुझे पता है कि यह गलत क्यों है? मैं पहले से ही इस प्रकार के प्रश्नों का उपयोग कर रहा हूं। – Ali

3

लैरवेल के संग्रह में, आप फ्लैटन नामक एक विधि को कॉल कर सकते हैं, जो एक बहु आयामी संग्रह को एक आयाम में फ़्लैट करता है।

https://laravel.com/docs/5.2/collections#method-flatten

$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]); 

$flattened = $collection->flatten(); 

$flattened->all(); 

// ['taylor', 'php', 'javascript']; 

एक काफी फ्लैट वस्तु के साथ, यह सिर्फ मान चाहिए।

+0

धन्यवाद, यह भी एक अच्छा विकल्प है। तो मैं इसे ऊपर उठा रहा हूँ –

1

उपयोग pluck():

$feature_project=FeatureProject::where('project_id', $project->id)->lists('id')->toArray(); 

आशा इस मदद करता है:

$feature_project = FeatureProject::where('project_id', $project->id)->pluck('feature_id'); 
0

आप lists() और toArray() उपयोग कर सकते हैं।

संबंधित मुद्दे