Yêu cầu thg 5 21, 2020 2:21 SA 182 0 3
  • 182 0 3
+1

Query model sử dụng WhereLike

Chia sẻ
  • 182 0 3

Hiện nay em đang thực hiện một chức năng search sử dụng whereLike. Hiện nay trong DB dữ liệu cột name được lưu là "Street#<số>". Khi em sử dụng câu query như sau:

$name = 'Street#3';

$street = Street::where('name', 'LIKE', "%{$name}%")->get();

Kết quả hiện nay đang trả về là toàn bộ bàn ghi của Model Street thay vì chỉ các bản ghi có liên quan tới name là 'Street#3'. Em đã thử remove '#' nhưng kết quả không được như mong đợi lắm.

Avatar Michael Scofield @simple1805
thg 5 21, 2020 2:26 SA

Bật debugbar xem query đang như thế nào em. Liệu có bị cache query không ?

thg 5 21, 2020 2:33 SA

MySQL hả em?

3 CÂU TRẢ LỜI


Đã trả lời thg 5 21, 2020 2:51 SA
Đã được chấp nhận
+2

Bạn thử

$name = 'Street\#3';
Chia sẻ
thg 5 21, 2020 2:53 SA

Cảm ơn anh nhiều 👍

Avatar Nguyễn Ngọc @doangiau2006
thg 5 22, 2020 10:40 SA
Avatar Nguyễn Ngọc @doangiau2006
thg 5 22, 2020 10:43 SA
Đã trả lời thg 5 21, 2020 2:39 SA
0

Mình thấy thì cách bạn query không có vấn đề gì.

Mình có thể gợi ý một hướng để bạn gỡ lỗi: thử xem đoạn code trên trả về SQL thế nào:

$query = Street::where('name', 'LIKE', "%{$name}%");
$query->toSql(); // lấy câu lệnh sql
$query->getBindings(); // lấy các param

Sau đó nếu thấy câu query bằng SQL vẫn chính xác, hãy thử execute trực tiếp câu query SQL đó (bằng CLI của mysql hay psql) và kiểm tra kết quả trả về.

Chia sẻ
Đã trả lời thg 5 21, 2020 2:45 SA
0

Cái $name em thử đổi lại thành số thôi.

Sẽ là 5 thay vì Street#5. Sau đó thì thử như này xem được không:

$street = Street::where('name', 'LIKE', "Street#%{$name}%")->get();
Chia sẻ
thg 5 21, 2020 2:52 SA

@huukimit Yêu cầu người ta muốn search toàn bộ, chứ k chỉ đơn thuần là số ạ 😦

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí