2016-08-12 10 views
5

बोलने में, मैं 10 पंक्तियों को कैसे छोड़ सकता हूं और फिर बाकी तालिका प्राप्त कर सकता हूं?छोड़ें और सब कुछ ले लो?

User::skip(10)->all(); 

उपरोक्त काम नहीं करता है, लेकिन यह आपको एक विचार देता है कि मैं क्या देख रहा हूं।

उत्तर

3

इस प्रयास करें:

$count = User::count(); 
$skip = 10; 

User::skip($skip)->take($count - $skip)->get(); 

एक क्वेरी के साथ:

User::skip($skip)->take(18446744073709551615)->get(); 

यह बदसूरत है, लेकिन यह एक उदाहरण from official MySQL manual है:

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:

SELECT * FROM tbl LIMIT 95,18446744073709551615; 
+0

और अगर आप सरणी चाहते हैं, तो सभी के साथ जारी: 'उपयोगकर्ता :: छोड़ (10) -> मिल() -> सभी();' –

+0

धन्यवाद लेकिन यह एक त्रुटि देता है: सिंटैक्स त्रुटि या पहुँच उल्लंघन : 1064 आपको अपने एसक्यूएल सिंटैक्स में एक त्रुटि है; लाइन 1 पर '10' के करीब उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके मारियाडीबी सर्वर संस्करण से मेल खाने वाले मैनुअल की जांच करें (एसक्यूएल: 'उपयोगकर्ता 'ऑफसेट 10 से चुनें *)। डेटाबेस उपयोगकर्ता :: सभी() ठीक काम करता है के रूप में काम कर रहा है। – panthro

+0

यह अजीब बात है। ठीक है, कृपया अद्यतन कोड का प्रयास करें। –

2

यकीन के लिए यह यह काम की तरह कुछ प्रयास करें।

$temp = User::count(); 
$count = $temp - 10; 

$data = User::take($count)->skip(10)->get(); 
1

लैरवेल 5 संग्रह के रूप में विलुप्त परिणाम देता है। तो आप कोलेक्शन फ़ंक्शन स्लाइस() का उपयोग कर सकते हैं;

$users = User::get(); 
$slicedUsers = $users->slice(10); 
+2

यह काम करेगा, लेकिन अगर आप बड़ी मेज के साथ ऐसा करते हैं तो यह आसानी से स्मृति को मार सकता है। –

+0

@AlexeyMezenin या, यह सच है। लेकिन कुछ लोगों के लिए, यह समाधान भी अच्छा हो सकता है। अगर वे बड़ी टेबल के साथ काम नहीं करते हैं। –

+2

@Autista_z यह सभी डेटा पुनर्प्राप्त करेगा, पहले 10 हटा दिए जाएंगे, इसके बजाय एलेक्सी मेज़ेनिन ने जवाब देने की चाल की है। –

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