लारवेल -5 'LIKE' समकक्ष (एलोकेंट)


143

मैं लारावेल 5 के साथ डेटाबेस से कुछ परिणाम खींचने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं।

BookingDates::where('email', Input::get('email'))->orWhere('name', 'like', Input::get('name'))->get()

हालाँकि, orWhereLike किसी भी परिणाम से मेल नहीं खाता। MySQL स्टेटमेंट के संदर्भ में वह कोड क्या उत्पन्न करता है?

मैं निम्नलिखित की तरह कुछ हासिल करने की कोशिश कर रहा हूँ:

select * from booking_dates where email='my@email.com' or name like '%John%'

जवाबों:


380

यदि आप यह देखना चाहते हैं कि डेटाबेस में क्या चलाया जाता है, dd(DB::getQueryLog())यह देखने के लिए कि क्या प्रश्न चलाए गए थे।

इसे इस्तेमाल करे

BookingDates::where('email', Input::get('email'))
    ->orWhere('name', 'like', '%' . Input::get('name') . '%')->get();

35
क्या यह क्वेरी sql इंजेक्शन संरक्षित है?
पार्थो

23
@ अपरको हां। लारवेल पूरे स्ट्रिंग को स्क्रीन करता है जिसे आप whereविधि के तीसरे तर्क के रूप में पास करते हैं ।
चालाकी

8
जबकि इंजेक्शन संरक्षित आप उपयोगकर्ता इनपुट में अप्रत्याशित% के लिए जाँच करना चाहते हो सकता है। जैसे, "% जॉन%" और LIKE "जॉन%" अलग तरह से प्रदर्शन करते हैं (आप केवल बाद का इरादा कर सकते हैं)। खाली इनपुट पर भी विचार करें, और फिर अकेले "%" पर, जिससे उपरोक्त कोड से अनपेक्षित परिणाम भी हो सकते हैं।
इयान फ्लीटन

4
इयान के साथ सहमत हुए। लारवेल केवल आंशिक रूप से बच निकलता है। यदि आप LIKE से ठीक से बच नहीं पाते हैं, तब भी बहुत सारी शरारतें संभव हैं। यहाँ बताया गया है: stackoverflow.com/a/42028380/329062
ग्रेग

9
$data = DB::table('borrowers')
        ->join('loans', 'borrowers.id', '=', 'loans.borrower_id')
        ->select('borrowers.*', 'loans.*')   
        ->where('loan_officers', 'like', '%' . $officerId . '%')
        ->where('loans.maturity_date', '<', date("Y-m-d"))
        ->get();

-> जहां ( 'की तरह' 'loan_officers', '%' $ officerId '%'।।) जहां loan_officers धारावाहिक क्षेत्र है
सादिक राशिद

7

मेरे पास इसके लिए स्कोप हैं, आशा है कि यह किसी की मदद करेगा।

public function scopeWhereLike($query, $column, $value)
{
    return $query->where($column, 'like', '%'.$value.'%');
}

public function scopeOrWhereLike($query, $column, $value)
{
    return $query->orWhere($column, 'like', '%'.$value.'%');
}

उपयोग:

$result = BookingDates::whereLike('email', $email)->orWhereLike('name', $name)->get();

5

मुझे लगता है कि क्वेरी के लिए मापदंडों को पारित करने की अच्छी प्रथाओं का पालन करना बेहतर है:

BookingDates::whereRaw('email = ? or name like ?', [$request->email,"%{$request->name}%"])->get();

आप इसे दस्तावेज़ में देख सकते हैं, Laravel 5.5।

आप लारवेल स्काउट का उपयोग कर सकते हैं और खोज के साथ इसे आसान बना सकते हैं। यहाँ प्रलेखन है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.