LIKE का उपयोग करके डेटाबेस की खोज करने के लिए Laravel में एलोक्वेंट ORM का उपयोग करना


94

मैं खोज क्वेरी बनाने के लिए एलोकेंट के सक्रिय रिकॉर्ड बिल्डिंग का उपयोग करना चाहता हूं, लेकिन यह एक LIKE खोज होने जा रहा है। मैंने पाया है User::find($term)या नहीं User::find(1), लेकिन यह एक तरह का बयान नहीं दे रहा है। मैं एक प्रत्यक्ष उत्तर की तलाश में नहीं हूं, लेकिन अगर कोई मुझे कम से कम एक दिशा दे सकता है तो वह बहुत अच्छा होगा!


2
laravel.com/docs/database/eloquent .. आप प्रलेखन का उपयोग कर सकते हैं ıt बहुत स्पष्ट है।
इट्सीजैम

2
मैंने इस पृष्ठ को देखा है मैंने वाइल्डकार्ड के साथ खोज करने के बारे में कुछ भी नहीं देखा है। मैं भी फॉरेस्ट लूप में रेगेक्स स्थापित नहीं करना चाहता था क्योंकि वहाँ सैकड़ों हजारों पंक्तियाँ हैं
जोनाथन

$ ईमेल = DB :: टेबल ('उपयोगकर्ता') -> जहां ('आईडी', '=', 1) -> केवल ('ईमेल');
यत्सजम

इसे डॉक्स में धाराप्रवाह क्वेरी बिल्डर कहा जाता है।
ytsejam

यदि मैं उत्तर और आपकी टिप्पणी को उत्तर के रूप में चिह्नित कर सकता हूं, तो मैं करूंगा। मुझे सही दिशा में लाने के लिए धन्यवाद
जोनाथन

जवाबों:


235

आप इस सिंटैक्स के साथ LIKE का उपयोग करके डेटाबेस पा सकते हैं:

Model::where('column', 'LIKE', '%value%')->get();

1
इतना कुशल नहीं है, "घातक त्रुटि: अधिकतम 100 'के फंक्शन नेस्टिंग लेवल तक पहुंच गया, गर्भपात हो गया ...!"
ससी वरना कुमार

@ मुझे लगता है कि आप (साथ) विधि का उपयोग करके शामिल होते हैं और फिर आप हमेशा की तरह कॉलम खोज सकते हैं। वाक्य विन्यास शायद कुछ ऐसा है table.field
एंथनी

64

यदि आपको बार-बार LIKE का उपयोग करने की आवश्यकता है, तो आप समस्या को थोड़ा सरल कर सकते हैं। एक कस्टम तरीका () मॉडल में बनाया जा सकता है जो एलोक्विंट ओआरएम विरासत में मिलता है:

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

तो आप इस विधि का उपयोग इस तरह से कर सकते हैं:

User::like('name', 'Tomas')->get();

यह ऐसा करने का अधिक 'लारवेल' तरीका है। यह सिर्फ क्लीनर है और आपको एक जगह समायोजित करने की अनुमति देता है, बजाय चारों ओर जाने और प्रत्येक को समायोजित करने के लिए ->where()
डैनियल डेहुरस्ट 15

वास्तव में इस जवाब से प्यार है। यह मॉडल और इसके उपयोग को बहुत ही सुरुचिपूर्ण बनाता है जो कि लार्वा के बारे में है।
डेथमेथेर

29

FYI करें, ऑपरेटरों की सूची ( जैसे और अन्य सभी युक्त ) कोड में है:

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

अस्वीकरण:

जोएल लार्सन का जवाब सही है। मेरा उत्थान हुआ।

मुझे उम्मीद है कि यह उत्तर एलोकेंट ओआरएम ( सही प्रत्यक्ष लोगों को इंगित करता है ) के माध्यम से उपलब्ध होने पर अधिक प्रकाश डालता है । जब तक प्रलेखन के लिए एक लिंक बेहतर होगा, उस लिंक ने खुद को मायावी साबित कर दिया है।


18

एकल उद्धरण के बजाय दोहरे उद्धरण चिह्नों का उपयोग करें:

where('customer.name', 'LIKE', "%$findcustomer%")

नीचे मेरा कोड है:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

अगर आपको मेरे जैसे दोहरे उद्धरण पसंद नहीं हैं, तो यह आपके लिए एकल उद्धरणों के साथ काम करेगा:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.