2017-05-16 9 views
5

मैं एक विशिष्ट वर्ष के परिणाम प्राप्त करने के लिए सभी आवेदन प्रश्नों के लिए एक फ़िल्टर जोड़ना चाहता हूं।लार्वा 4.2 ऐप में सभी क्वेरी परिणामों को फ़िल्टर करने के लिए कैसे करें

मैं सत्र में चालू वर्ष डाल रहा हूँ के रूप में नीचे दिखाया गया है:

public function postLogin() 
{ 
    Session::put('currentYear', date("Y")); 
} 

मैं अपने आवेदन में कई नियंत्रकों की है। मैं सत्र मॉडल => सत्र :: प्राप्त करें ('currentYear')

मेरे पास बहुत सारे मॉडल हैं; उदाहरण के लिए मेरे पास सभी उपयोगकर्ताओं, शिक्षकों और छात्रों को देखने का एक मार्ग है।

public function getList() 
{ 
    $data['students'] = User::where('group_id', '=', 4)->get(); 

    return View::make('students.list', $data); 
} 

मैं Session::get('currentYear') द्वारा सभी एप्लिकेशन प्रश्नों फिल्टर करने के लिए BaseController में __construct रख सकते हैं? लेकिन अब तक उसे get() चलने के बिना इस वापसी -

+0

वैश्विक दायरे पर नज़र डालें https://laravel.com/docs/4.2/eloquent#global-scopes – Nerea

+0

क्यों न केवल अपने विशिष्ट कार्यों में कहां जोड़ें? वैश्विक फ़िल्टर जोड़ना अन्य प्रश्नों को भी प्रभावित कर सकता है। –

उत्तर

3

मैं एक विधि है कि वांछित आधार क्वेरी प्रदान करता है, इस तरह के रूप function getUserBaseQuery() { return User::where('year', '=', Session::get('currentYear')); }

जाहिर है यह सुनिश्चित करें कि currentYear सेट किया गया है के साथ एक भंडार वर्ग पैदा करेगा।

तब जब भी आप कोई प्रश्न पूछें, तो अधिक बेस ऑपरेशन (सीमा, ऑर्डर, जो भी) जोड़ें और get() चलाएं।

इस तरह आप कुछ वैश्विक संभावित नुकसान किए बिना अपने फ़िल्टर के साथ पहुंच सकते हैं और यह जान सकते हैं कि उस बेस क्वेरी को चुनकर कौन से फ़िल्टर चलाए जा रहे हैं।

क्या यह आपको समझ में आता है?

+0

ऐसा लगता है कि मैं एप्लिकेशन में प्रत्येक मॉडल के लिए एक ही फ़िल्टर बनाउंगा। सत्र सत्र चयन मेनू के साथ एप्लिकेशन देखने से पहले और जब आप इस ऐप में लॉगिन करते हैं तो आप वर्ष बदल सकते हैं तो आप केवल सभी दृश्यों और मॉडलों के लिए चयनित वर्ष रिकॉर्ड पुनर्प्राप्त करेंगे। मुझे लगता है कि आवेदन में सभी मॉडलों के लिए वैश्विक फ़िल्टर बनाना बेहतर होगा। उस समाधान के बारे में कोई विचार? –

+0

आप उस विधि में पैरामीटर जोड़ सकते हैं जिसमें आप मॉडल क्लास नाम, जैसे "उपयोगकर्ता" को सौंपते हैं। फिर अपने सामान्य फ़िल्टर को लागू करने के लिए $ model :: जहां (...) का उपयोग करें। –

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

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