2012-12-06 16 views
28

डिफ़ॉल्ट रूप से में एक वस्तु के बजाय एक सरणी के रूप में एक कच्चे क्वेरी से सेट को पुनः प्राप्त करने, Laravel के कच्चे क्वेरी तरीकों stdClass वस्तुओं की सरणियों के रूप में परिणाम देते हैं:कैसे एक परिणाम Laravel 3

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [username] => admin 
      [password] => admin123 
      [email] => [email protected] 
      [created_at] => 2012-12-06 18:57:19 
      [updated_at] => 2012-12-06 00:00:00 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [username] => userna 
      [password] => user 
      [email] => [email protected] 
      [created_at] => 2012-12-06 00:00:00 
      [updated_at] => 2012-12-05 00:00:00 
     ) 
) 

सवाल यह है कि करने के लिए है

Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [username] => admin 
       [password] => admin123 
       [email] => [email protected] 
       [created_at] => 2012-12-06 18:57:19 
       [updated_at] => 2012-12-06 00:00:00 
      ) 

     [1] => Array 
      (
       [id] => 2 
       [username] => userna 
       [password] => user 
       [email] => [email protected] 
       [created_at] => 2012-12-06 00:00:00 
       [updated_at] => 2012-12-05 00:00:00 
      ) 
    ) 
+0

बदलकर प्रदान करें प्राप्त कर सकते हैं अपने कोड जिसके परिणामस्वरूप यह –

+6

यह मेरे लिए सही समझ में आया, मैं लार्वेल सीखने की कोशिश कर रहा हूं और इस आर में भाग गया oadblock। यह एक वास्तविक और वैध सवाल है - यह सोचकर कि क्या लोग कहते हैं कि इस ढांचे के साथ कोई अनुभव नहीं है? – NightMICU

+7

यह बंद क्यों किया गया था? लोगों को खुद को पाने की जरूरत है। – dardub

उत्तर

19

Laravel 3 के लिए मूल जवाब के अपने लौटे सरणी है

सुवक्ता एक विधि to_array()

डॉक्स से है:

to_array विधि स्वतः के सभी हड़पने जाएगा पर आपके मॉडल के साथ-साथ किसी भी लोड किए गए रिश्तों पर विशेषताओं।

$user = User::find($id); 

return Response::json($user->to_array()); 

या

return Response::eloquent($user); 

आप धाराप्रवाह का उपयोग कर रहे हैं, तो आप के रूप में सिनान सुझाव दिया करते हैं और वैश्विक विन्यास बदल वस्तुओं के बजाय एक साहचर्य सरणी वापस जाने के लिए कर सकते हैं।

वैकल्पिक रूप से, आप जेएसओएन से किसी ऑब्जेक्ट को एक सरणी में परिवर्तित करने के लिए परिवर्तित कर सकते हैं हालांकि अधिकांश मामलों में वैश्विक विकल्प बेहतर होगा। आप उन परियोजनाओं में निम्न का उपयोग कर सकते हैं जहां आप सामान्य रूप से ऑब्जेक्ट पसंद करते हैं लेकिन कुछ किनारे के मामलों में एक सरणी की आवश्यकता होती है। यह विधि Eloquent के साथ अच्छी तरह से खेल नहीं पाएगी, उस मामले में उपरोक्त विधियों का उपयोग करें।

$users = DB::table('users')->where('name', '=', 'david')->get(); 

return array_map(function($val) 
{ 
    return json_decode(json_encode($val), true) 
}, $users); 

एक अन्य विकल्प अस्थायी रूप से Laravel के लिए क्रम विन्यास

Config::set('database.fetch', PDO::FETCH_ASSOC); 

बदलने के लिए किया जाएगा ~ 4

Laravel 4 में के बाद से, सभी विधि के नाम PSR-2 मानकों के अनुरूप।

$user = User::findOrFail($id); 

return Response::json($user->toArray()); 

// In Laravel 5 onward the functions are preferred to facades. 
return response()->json($user->toArray()); 
+1

अनचाहे अपवाद संदेश: अपरिभाषित विधि पर कॉल करें stdClass :: to_array() – Ramesh

+0

यह लैरवेल 3.x के लिए है, 'to_array() 'वाक्प्रचार का एक तरीका है। दस्तावेज़ों में भी http://laravel.com/docs/database/eloquent। क्या आप यह देखने के लिए अपने कुछ कोड साझा कर सकते हैं कि समस्या कहां है? –

+0

क्या फ्लुएंट के पास 'to_array()' के बराबर है? – Nyxynyx

11

अगर laravel सरणी के रूप में परिणाम देने के लिए बनाया गया समारोह में है मैं नहीं जानता, लेकिन अगर नहीं तो आप इस स्निपेट का उपयोग कर सकते हैं::

कहाँ Laravel बजाय सरणियों की एक सरणी वापसी है $data वस्तुओं

$data = json_decode(json_encode((array) $data), true); 
+0

फिर से खोलें बहुत बहुत धन्यवाद। इसका काम ... :) – Ramesh

+0

@ रमेश कोई समस्या नहीं है, यहां एक और जवाब है जो लार्वेल विधियों का उपयोग कर रहा है क्योंकि डेविडबाकर उत्तर – Dale

+0

यह एक बहुत ही बुरा अभ्यास है, क्योंकि आप दोनों इसे एन्कोड कर रहे हैं और फिर इसे डीकोडिंग इसके परिणामस्वरूप एक ही परिणाम होगा: '$ डेटा = (सरणी) $ डेटा;' –

35

तुम भी सभी परिणाम हमेशा सरणी के रूप में

आवेदन/config/database.php

'fetch' => PDO::FETCH_CLASS, 
लाइन 31 पर

को

'fetch' => PDO::FETCH_ASSOC, 
+0

लार्वेल 4 – vuhung3990

+0

पर काम करते हैं लेकिन कोड में गतिशील रूप से इसे कैसे करें? मैं केवल एक डीबी कनेक्शन के लिए ऐरे के रूप में लाने के लिए चाहता हूँ। मेरे पास यह कनेक्शन '$ sqlserv_connection = डीबी :: कनेक्शन ($ this-> getSqlServerConnectionName() प्राप्त करें; 'मुझे कुछ $ sqlserv_connection-> fetch (PDO :: FETCH_ASSOC) चाहिए' मुझे पता है कि यह अस्तित्व में नहीं है लेकिन कैसे हो सकता है मैं इसे प्राप्त करता हूँ? –

+1

बस 'fetch' सेटिंग को इंगित करना चाहते हैं कनेक्शन विशिष्ट नहीं है और डेटाबेस.php के शीर्ष पर है। किसी भी तरह से मैंने अनुमान लगाया कि यह कनेक्शन विशिष्ट था और इसे प्रत्येक कनेक्शन में जोड़ा गया, जिसका कोई प्रभाव नहीं पड़ा। उम्मीद है कि कुछ अन्य गुमराह आत्मा में मदद करता है। –

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