2013-01-15 18 views
8

मैं अपनी डेटाबेस तालिका में सभी पंक्तियों को वापस करना चाहता हूं जो एक दिन या उससे कम पुरानी हैं। मैं लैरवेल 4 का उपयोग कर रहा हूं। मैंने यह कोशिश की:लार्वेल/एलोक्वेन्ट और तुलना दिनांक

$date = date('Y-m-d H:i:s'); 
return MainContact::where(DATEDIFF('timestamp', $date), '<=', 1)->get(); 

यह काम नहीं करता है। मैंने प्रलेखन पढ़ा और ऐसा प्रतीत नहीं होता कि आप लैरावेल माईएसक्यूएल फ़ंक्शन पास कर सकते हैं। timestamp एक डेटाटाइम क्षेत्र है। मैं लैरवेल 4 में इन तिथियों की तुलना कैसे कर सकता हूं?

उत्तर

9

जवाब यह है कि user1977808 दिया करते हैं आप नहीं है अच्छा क्योंकि MySQL टाइमस्टैम्प कॉलम पर एक इंडेक्स का उपयोग नहीं कर सकता है, क्योंकि इसे प्रत्येक पंक्ति के लिए DATE_SUB फ़ंक्शन के आउटपुट की गणना करना है। ऐसे प्रश्नों से बचें, उन्हें हर बार पूरी टेबल को संसाधित करना होगा!

कैसे कुछ इस तरह के बारे में:

return MainContact::where('timestamp', '>=', time() - (24*60*60))->get(); 

मैं >= वहाँ में है क्योंकि आप ने कहा, "एक दिन या उससे कम पुराने" शब्दों में कहें, तो वे टाइमस्टैम्प कल की तुलना में बाद है कि होना आवश्यक है।

+0

हाँ, मुझे अपना MySQL समायोजित करना पड़ा। – sehummel

+2

मैंने 'मुख्य संपर्क नहीं किया :: जहां ('टाइमस्टैंप', '>', डीबी :: कच्चा ('अब() - अंतराल' $ अंतराल। 'दिन') -> प्राप्त करें(); 'और फिर अंतराल में पारित किया गया मैं चाहता था। – sehummel

+2

आप 'स्ट्रेटोटाइम ("- 1 दिन") का उपयोग भी कर सकते हैं, जैसे: 'मेनकंटैक्ट :: जहां (' टाइमस्टैंप ','> 'स्ट्रेटोटाइम (" - {$ अंतराल} दिन ") -> प्राप्त करें(); ' –

0

तुम भी उपयोग करके एक कच्चे क्वेरी कर सकते हैं:

$results = DB::query('query'); 

आप केवल नहीं मॉडल वस्तु वापस परिणामों वर में

+0

हाँ, इस दृष्टिकोण मैं अब काम कर रहा हूँ है। – sehummel

+0

मैं उम्मीद कर रहा था कि एक बेहतर तरीका था। – sehummel

2
return MainContact::where('timestamp', '>=', time() - (24*60*60))->get(); 
+0

मैंने कुछ ऐसा ही किया। – sehummel

3

वैकल्पिक रूप से,

आप Carbon API कि Laravel के साथ बंडल का उपयोग कर सकते हैं।

ModelName::where('timestamp', '>=', Carbon::now())->get(); 

संदर्भ: http://laravel.com/docs/5.1/eloquent-mutators

+0

वह लैरवेल 4 का उपयोग नहीं कर रहा है 5। – Ian

0

तुम भी whereDate(), whereDay(), whereMonth() और whereYear() इस्तेमाल कर सकते हैं। इस मामले में, whereDate() कार्बन का आसान तारीख कार्यों के साथ, इस तरह के रूप में इस्तेमाल किया जा सकता है:

return MainContact::whereDate('dateField', '<', Carbon::now()->subDay())->get();

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