Laravel उन्नत Wheres कैसे कार्य में चर पारित करने के लिए?


86

डॉक्टर में उदाहरण:

DB::table('users')
        ->whereExists(function($query)
        {
            $query->select(DB::raw(1))
                  ->from('orders')
                  ->whereRaw('orders.user_id = users.id');
        })
        ->get();

लेकिन क्या होगा अगर मुझे उस तरह बाहरी चर का उपयोग करने की आवश्यकता है:

            ->where('city_id', '=', $this->city->id)
            ->where(function($query)
                {
                    $query->where('name', 'LIKE', '%'.$searchQuery.'%')
                    ->orWhere('address', 'LIKE', '%'.$searchQuery.'%')

                })

अभी के लिए मैंने नई संपत्ति बनाई और इसके माध्यम से एक्सेस किया $this->, लेकिन क्या कोई और सुविधाजनक तरीका है?

जवाबों:


225

आप मूल चर से आवश्यक चर को useखोजशब्द के साथ बंद कर सकते हैं।

उदाहरण के लिए:

DB::table('users')->where(function ($query) use ($activated) {
    $query->where('activated', '=', $activated);
})->get();

उस पर और यहाँ

EDIT (2019 अपडेट):

PHP 7.4 ( 28 नवंबर, 2019 को जारी किया जाएगा ) तीर फ़ंक्शन नामक अनाम फ़ंक्शंस की एक छोटी विविधता का परिचय देता है जो इसे थोड़ा कम वर्बोज़ बनाता है।

PHP 7.4 का उपयोग करने वाला एक उदाहरण जो कार्यात्मक रूप से लगभग बराबर है (नीचे 3 बुलेट बिंदु देखें):

DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated))->get();

नियमित सिंटैक्स की तुलना में अंतर:

  • fnके बजाय कीवर्ड function
  • सभी चर को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता नहीं है, जिसे मूल दायरे से कैप्चर किया जाना चाहिए - यह अब स्वचालित रूप से मूल्य द्वारा किया जाता है। useबाद के उदाहरण में कीवर्ड की कमी देखें ।
  • एरो फ़ंक्शंस हमेशा एक मान लौटाते हैं। इसका मतलब यह भी है कि voidउन्हें घोषित करते समय रिटर्न प्रकार का उपयोग करना असंभव है ।
  • returnकीवर्ड चाहिए लोप हो।
  • एरो फ़ंक्शंस में एक एकल अभिव्यक्ति होनी चाहिए जो कि रिटर्न स्टेटमेंट है। मल्टी-लाइन फ़ंक्शन इस समय समर्थित नहीं हैं। आप अभी भी श्रृंखला विधियों हालांकि कर सकते हैं।

15

@kajetons का उत्तर पूरी तरह कार्यात्मक है।

आप कई चर भी पास कर सकते हैं जैसे: use($var1, $var2)

DB::table('users')->where(function ($query) use ($activated,$var2) {
    $query->where('activated', '=', $activated);
    $query->where('var2', '>', $var2);
})->get();

5

यदि आप लारवेल इलक्वांट का उपयोग कर रहे हैं तो आप इसे भी आजमा सकते हैं।

$result = self::select('*')
                    ->with('user')
                    ->where('subscriptionPlan', function($query) use($activated){
                        $query->where('activated', '=', $roleId);
                    })
                    ->get();

2

आप इसका उपयोग करके चर पास कर सकते हैं ...

$status =1;
 $info = JOBS::where(function($query) use ($status){        
         $query->where('status',$status);
         })->get();
print_r($info);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.