Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

laravel mencari beberapa kata yang dipisahkan oleh spasi

Beginilah cara Anda melakukannya dengan Query\Builder , tapi pertama-tama beberapa catatan tambahan:

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

Yang mengatakan, Anda jelas tidak dapat mengandalkan explode karena dalam kasus di atas Anda akan mendapatkan semua baris.

Jadi, inilah yang harus Anda lakukan:

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

Ada penutupan di where karena ini adalah praktik yang baik untuk membungkus or where . Anda klausa dalam kurung. Misalnya jika User . Anda model yang digunakan SoftDeletingScope dan Anda tidak akan melakukan apa yang saya sarankan, seluruh kueri Anda akan kacau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PEMBARUAN SQL dengan LIKE

  2. MySQL LIMIT dalam Subquery Berkorelasi

  3. Kalender PHP dengan acara berulang dari database MySQL

  4. mysql - Secara otomatis memperbarui kejadian di tabel lain

  5. Mengapa SQLAlchemy count() jauh lebih lambat daripada kueri mentah?