Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tìm kiếm laravel nhiều từ được phân tách bằng dấu cách

Đây là cách bạn thực hiện với Query\Builder , nhưng trước tiên một số lưu ý bổ sung:

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

Điều đó nói rằng, bạn rõ ràng không thể dựa vào explode bởi vì trong trường hợp trên, bạn sẽ nhận được tất cả các hàng.

Vì vậy, đây là những gì bạn nên làm:

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

Có sự đóng cửa trong where bởi vì nó là một thực tiễn tốt để bọc or where mệnh đề trong ngoặc đơn. Ví dụ:nếu User của bạn mô hình được sử dụng SoftDeletingScope và bạn sẽ không làm những gì tôi đề xuất, toàn bộ truy vấn của bạn sẽ rối tung lên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy các trường theo tên trong truy vấn Python?

  2. Truy vấn riêng biệt của Django MySQL để nhận nhiều giá trị

  3. Mã PHP để chèn giá trị hộp kiểm vào cột cụ thể trên mysql với biểu mẫu chọn

  4. Gấu trúc Python ghi vào sql với các giá trị NaN

  5. Đo thời gian truy vấn MySQL thực tế