Query\Builder
. के साथ आप इसे इस तरह से करते हैं , लेकिन पहले कुछ अतिरिक्त नोट:
// user can provide double space by accident, or on purpose:
$string = 'john doe';
// so with explode you get this:
explode(' ', $string);
array(
0 => 'john',
1 => '',
2 => 'doe'
)
// Now if you go with LIKE '%'.value.'%', you get this:
select * from table where name like '%john%' or name like '%%' or ...
उस ने कहा, आप स्पष्ट रूप से explode
. पर भरोसा नहीं कर सकते हैं क्योंकि उपरोक्त मामले में आपको सभी पंक्तियां मिल जाएंगी।
तो, आपको यही करना चाहिए:
$string = 'john doe';
// split on 1+ whitespace & ignore empty (eg. trailing space)
$searchValues = preg_split('/\s+/', $string, -1, PREG_SPLIT_NO_EMPTY);
$users = User::where(function ($q) use ($searchValues) {
foreach ($searchValues as $value) {
$q->orWhere('name', 'like', "%{$value}%");
}
})->get();
where
. में बंद है क्योंकि अपने or where
. को लपेटना एक अच्छा अभ्यास है कोष्ठक में खंड। उदाहरण के लिए यदि आपका User
इस्तेमाल किया गया मॉडल SoftDeletingScope
और आप वह नहीं करेंगे जो मैंने सुझाया था, आपकी पूरी क्वेरी गड़बड़ हो जाएगी।