Asked Dec 18th, 2020 3:59 AM 89 0 3
  • 89 0 3
+1

Truy vấn dữ liệu mysql với bitwise status laravel

Share
  • 89 0 3

Hiện tại model của em đang có một số status:

  • init =1
  • pending = 64
  • success = 8
  • charged = 128

Một record của model sẽ đi từ init -> pending -> success -> cheger hoặc init -> success -> charged. Hiện tại em query model->where('status', '&', $status) với status = 1 thì dữ liệu trả ra cả những record pending,success,charged vì những record này từng ở status =1 rồi.

Không biết có cách nào để truy vấn sql lấy những record đang ở trạng thái mình muốn tìm không ạ?. Em cảm ơn

3 ANSWERS


Answered Dec 18th, 2020 4:14 AM
0

Nếu chỉ có record 1 không thì bạn có thể viết riêng điều kiện nếu $status = 1 thì query sẽ là model->whereIn('status', [1, 8, 64, 128]]) :v

Còn nếu theo kiểu status là 64 thì sẽ phải trả ra 64, 8, 128 thì sẽ phải viết kiểu khác

Share
Dương Siêu @duongdosieu224
Dec 18th, 2020 4:20 AM

nếu whereIn vậy thì khi từ init sang peding status trong db sẽ là 65 sẽ không query được record pending tới a

0
| Reply
Share
Answered Dec 18th, 2020 4:58 AM
0

Như mình hiểu là bác đang muốn tìm chính xác record phải k nhỉ?

Tìm status là pending
id: 2 , status = 65 // init | pending => pass
id: 3 , status = 73 // init | pending | success => fail

Vì rule như mình thấy, thì pending luôn sau init

model->where('status', '=' , 1 | 64)

Tương tự nếu dùng cho các status khác nhé bác

Share
Dec 18th, 2020 5:00 AM
Dec 18th, 2020 5:01 AM
Dec 18th, 2020 5:03 AM
Answered Dec 18th, 2020 6:20 AM
0

Giống cách phân quyền 777 linux quá nhỉ. bạn thử xem : model->where("status & $status", '>', 0)

Share