Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लार्वा अंतरिक्ष द्वारा अलग किए गए कई शब्दों की खोज करता है

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 और आप वह नहीं करेंगे जो मैंने सुझाया था, आपकी पूरी क्वेरी गड़बड़ हो जाएगी।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या mySql में स्प्लिट () विधि के समान कुछ है?

  2. खोज सभी उत्पादों को दिखा रही है

  3. MySQL ट्रिगर डिबगिंग

  4. डिस्टिंक्ट बनाम ग्रुप बाय

  5. मुझे MySQL में एक फ़ील्ड को auto_increment करने की आवश्यकता है जो प्राथमिक कुंजी नहीं है