2015-04-28 12 views
6

पर एरे मुझे DB::select() से लौटाई गई सरणी के साथ समस्याएं आ रही हैं। मैं अपने एपीआई में प्रचलित मॉडल के Collections पर skip और take का भारी उपयोग कर रहा हूं। दुर्भाग्यवश, डीबी :: चयन एक सरणी देता है, जो स्पष्ट रूप से छोड़कर काम नहीं करता है। एरे को एक संग्रह में कैसे परिवर्तित किया जाएगा जो इन विधियों का उपयोग कर सकता है?रीस्टफुल एपीआई - संग्रह लैरेवेल 5

मैं

\Illuminate\Support\Collection::make(DB::select(...)); 

कौन सा काफी नहीं काम के रूप में मैं उम्मीद करता है की कोशिश की है, क्योंकि यह एक संग्रह, न कि व्यक्तिगत परिणामों में पूरे सरणी गिर्द घूमती है।

क्या DB::select से 'उचित' संग्रह में वापसी को परिवर्तित करना संभव है जो skip और take विधियों का उपयोग कर सकते हैं?

अद्यतन

मैं भी कोशिश की है:

$query = \Illuminate\Support\Collection::make(DB::table('survey_responses')->join('people', 'people.id', 
     '=', 'survey_responses.recipient_id')->select('survey_responses.id', 'survey_responses.response', 
     'survey_responses.score', 'people.name', 'people.email')->get()); 

कौन सा अभी भी मुझसे कहता है:

FatalErrorException in QueryHelper.php line 36: 
Call to a member function skip() on array 

चीयर्स

उत्तर

2

बाकी है कि Laravel में समस्या इस तरह की हो रही है किसी को भी के लिए, मैं बाहर एक काम के संबंध में निम्न समाधान के साथ लगा:

 $query = DB::table('survey_responses')->join('people', 'people.id', '=', 'survey_responses.recipient_id') 
      ->select('survey_responses.id', 'survey_responses.response', 'survey_responses.score', 'people.name', 'people.email'); 
      if(isset($tags)){ 
       foreach($tags as $tag){ 
        $query->orWhere('survey_responses.response', 'like', '%'.$tag.'%'); 
       } 
      }; 

     // We apply the pagination headers on the complete result set - before any limiting 
     $headers = \HeaderHelper::generatePaginationHeader($page, $query, 'response', $limit, $tags); 
     // Now limit and create 'pages' based on passed params 
     $query->offset(
      (isset($page) ? $page - 1 * (isset($limit) ? $limit : env('RESULTS_PER_PAGE', 30)) : 1) 
     ) 
     ->take(
      (isset($limit) ? $limit : env('RESULTS_PER_PAGE', 30)) 
     ); 

असल में, मुझे पता है आप लगभग संवर्द्धित क्वेरी चला सकता है कि नहीं था , जिसने मुझे से पहले लौटाए गए डेटा को सीमित करने से पहले पृष्ठांकन अंक उत्पन्न करने में सक्षम बनाया।

10

मैं कोशिश करेंगे:

$queryResult = DB::table('...')->get(); 

$collection = collect($queryResult); 

यदि क्वेरी परिणाम एक सरणी है, तो संग्रह आपके परिणामों से भरा हुआ है। संग्रह के लिए आधिकारिक दस्तावेज देखें। Laravel5 Collections

+0

टिप्पणी के लिए धन्यवाद। मैंने संग्रह :: मेक() के साथ उस हिस्से को प्रबंधित किया, दुर्भाग्यवश मैं अभी भी संग्रह() और संग्रह के खिलाफ() ले जाने में असमर्थ हूं। – LokiSinclair

+1

मुझे यकीन नहीं है कि स्किप() के साथ आपका क्या मतलब है और ले लें()। संग्रह वर्ग की खुराक में ऐसी विधियां नहीं हैं। [संग्रह] (http://laravel.com/api/5.0/Illuminate/Support/Collection.html) क्या आप संग्रह के साथ क्या करना चाहते हैं पोस्ट कर सकते हैं? – ZengineChris

+0

हां, क्षमा करें संग्रह कक्षा की मेरी समझ सीमित थी। मैं क्या करना चाहता हूं मैन्युअल रूप से छोड़ने और विधियों के साथ पेजिनेशन हेडर का निर्माण करना है। दुर्भाग्यवश, ये विधियां केवल क्वेरी \ Builder क्लास पर उपलब्ध प्रतीत होती हैं। मुझे कुछ और रास्ता खोजना होगा। हालांकि धन्यवाद। – LokiSinclair

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