Yêu cầu thg 8 10, 2020 3:07 CH 144 0 4
  • 144 0 4
0

Truy vấn datime trong laravel

Chia sẻ
  • 144 0 4

Mình có 1 bảng table_otp ( id, code, created_at) . và có tạo 1 cronjob cứ 1 phút thì xử lý 1 lần để kiểm tra xem bản ghi nào > 5 phút sẽ xóa bản ghi đó đi ( chỉ cho phép tồn tại 5 phút rồi tự hủy). mình có tham khảo vài cách xử lý datetime nhưng chưa tìm được cách nào hợp lỹ lắm. Bạn nào cho mình lời khuyên với. Thanks.

4 CÂU TRẢ LỜI


Đã trả lời thg 8 11, 2020 12:53 SA
Đã được chấp nhận
+5

Bạn lấy thời gian hiện tại trừ đi 5 phút . rồi so sánh với trường created_at nếu created_at nó nhỏ hơn thì thực hiện xóa bản ghi đó. Bạn có thể tham thảo câu truy vấn này:

Model::where('created_at',  '<', \Carbon\Carbon::now()->subMinutes(5))->delete();
Chia sẻ
Avatar TinhTN @tinhtn89
thg 8 11, 2020 1:45 SA

Hợp lý, cảm ơn bạn.

Đã trả lời thg 8 11, 2020 1:23 SA
+3

Thay vì cho chạy cron job 1 phút/lần, một cách tốt hơn là thêm một trường tên expires_at (bằng now() + 5 phút) cho bảng table_otp của bạn và check cái trường này lúc xác nhận otp xem đã bị vượt quá chưa.

Sau đó bạn vẫn cần cron job để dọn dẹp, nhưng chỉ cần chạy nó 1 tuần/lần thôi thay vì mỗi phút, hiệu năng sẽ ổn hơn nhiều.

Chia sẻ
Avatar TinhTN @tinhtn89
thg 8 11, 2020 1:45 SA

Ý tưởng rất hay, cảm ơn bạn hỗ trợ.

Đã trả lời thg 8 11, 2020 3:24 SA
+1

Theo mình hiểu thì bạn đang làm chức năng tạo mã otp và nó chỉ có hiệu lực trong 5', mình nghĩ có thể thêm 1 trường expired_at = created_at + 5' và khi truy vấn thì thêm điều kiện created_at <= now() <= expired_at là được.

Không biết làm như thế có đúng với yêu cầu của bạn không nhưng mình nghĩ như thế sẽ đơn giản hơn là chạy cronjob 1 phút 1 lần!

Chia sẻ
Avatar TinhTN @tinhtn89
thg 8 11, 2020 3:58 SA

Đúng chuẩn ý luôn, cảm ơn bạn.

Đã trả lời thg 8 10, 2020 4:45 CH
0

Bạn lấy thời gian trong created_at rồi cộng thêm 5 phút nếu nó lớn hơn thời gian hiện tại thì bạn thực hiện xóa bản ghi đó (Có thể sử dụng carbon để tính thời gian và lấy thời gian hiện tại)

Chia sẻ
Avatar TinhTN @tinhtn89
thg 8 11, 2020 1:45 SA

Cái này viết truy vấn kiểu gì được bạn?

Avatar Phan Lý Huỳnh @phanlyhuynh
thg 8 11, 2020 1:52 SA

@tinhtn89 =)) tương tự với bạn trừ đi 5 phút, nhỏ hơn phía trên kìa. còn trường hợp t là cộng thêm, lớn hơn thôi :v

Avatar TinhTN @tinhtn89
thg 8 11, 2020 1:59 SA

khác chứ, created_at làm sao bạn cộng thêm được, nó là trường dữ liệu mà.

Avatar Phan Lý Huỳnh @phanlyhuynh
thg 8 11, 2020 2:06 SA

@tinhtn89 =)) cách trừ thì nó ngắn gọn hơn còn cộng thì dài hơn bạn phải lấy dữ liệu ra rồi mới so sánh create_at rồi mới xóa chứ

Avatar TinhTN @tinhtn89
thg 8 11, 2020 2:11 SA

ừ, cách của ban phải lấy dữ liệu ra rồi mới so sánh sau đó mới xóa , nên mình mới bảo là khó viết truy vấn sql mà.

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í