Asked Aug 10th, 3:07 PM 95 0 4
  • 95 0 4
0

Truy vấn datime trong laravel

Share
  • 95 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 ANSWERS


Answered Aug 11th, 12:53 AM
Accepted
+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();
Share
TinhTN @tinhtn89
Aug 11th, 1:45 AM

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

0
| Reply
Share
Answered Aug 11th, 1:23 AM
+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.

Share
TinhTN @tinhtn89
Aug 11th, 1:45 AM

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

+1
| Reply
Share
Answered Aug 11th, 3:24 AM
+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!

Share
TinhTN @tinhtn89
Aug 11th, 3:58 AM

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

+1
| Reply
Share
Answered Aug 10th, 4:45 PM
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)

Share
TinhTN @tinhtn89
Aug 11th, 1:45 AM

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

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
Aug 11th, 1:52 AM

@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

0
| Reply
Share
TinhTN @tinhtn89
Aug 11th, 1:59 AM

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

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
Aug 11th, 2:06 AM

@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ứ

0
| Reply
Share
TinhTN @tinhtn89
Aug 11th, 2:11 AM

ừ, 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à.

0
| Reply
Share