Yêu cầu thg 12 18, 2020 3:59 SA 128 0 3
  • 128 0 3
+1

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

Chia sẻ
  • 128 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 CÂU TRẢ LỜI


Đã trả lời thg 12 18, 2020 4:14 SA
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

Chia sẻ
Avatar Dương Siêu @duongdosieu224
thg 12 18, 2020 4:20 SA

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

Đã trả lời thg 12 18, 2020 4:58 SA
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

Chia sẻ
thg 12 18, 2020 5:00 SA
thg 12 18, 2020 5:01 SA
thg 12 18, 2020 5:03 SA
Đã trả lời thg 12 18, 2020 6:20 SA
0

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

Chia 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í