sql >> Databáze >  >> RDS >> Mysql

laravel hledat více slov oddělených mezerou

Takto to uděláte pomocí Query\Builder , ale nejprve několik dalších poznámek:

// 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 ...

To znamená, že se zjevně nemůžete spoléhat na explode protože ve výše uvedeném případě byste získali všechny řádky.

Takže byste měli udělat toto:

$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();

V where je uzavření protože je dobrým zvykem zabalit or where věty v závorkách. Například pokud váš User použitý model SoftDeletingScope a neudělali byste to, co jsem navrhoval, celý váš dotaz by byl zmatený.



  1. Vybrat procento řádků z tabulky SQL?

  2. Jak provést vyhledávání rozlišující malá a velká písmena v klauzuli WHERE (používám SQL Server)?

  3. Vyberte počet (*) z více tabulek

  4. Jak vytvořím složený klíč pomocí SQL Server Management Studio?