Mysql
 sql >> база данни >  >> RDS >> Mysql

laravel търсене в няколко думи, разделени с интервал

Ето как го правите с 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. MySQL timestamp изберете период от време

  3. MySQL множество колони в IN клауза

  4. MySQL Connect чрез прокси в Java

  5. Система за препоръчани потребители, използваща PHP и MySQL