[英]How to periodically update a database table's column for a million records in Laravel?
在我的用戶表中,我需要在上午 12 點將“每日”列恢復為默認值“1”。
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name', 50);
$table->string('email')->unique();
$table->unsignedTinyInteger('daily')->default('1');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
有沒有辦法可以在每天上午 12 點將值恢復為默認值 1 或將一百萬條記錄的值更新為 1 而沒有時間延遲(意味着所有用戶的“每日”列將同時更新)?
注意:“每日”列用於確定用戶是否已“用完”每日點擊次數。 用戶每天將有 1 次機會點擊一個按鈕(有點像一個獎勵框)。 一旦他們點擊了按鈕,每日將更新為“0”,他們將無法再次點擊該按鈕,直到第二天。
而不是使用循環,您可以像這樣使用 eloquent :
Model::whereIn('id', $request->'name coloumn')->update(['name coloumn' => 1]);
Model::whereNotIn('id', $request->'name coloumn')->update(['name coloumn' => 0]);
您需要在序列化級別為可序列化的事務中進行更新,以確保它立即完成並且沒有其他事務干擾更新。 至於時間,我不知道您如何才能在 00:00 准確地完成更新。 無論你做什么,它都會在午夜之前或之后發生。 另一種解決方案是為每一行設置一個時間戳,並在更新時使用觸發器來檢查時間戳是否在午夜之前,如果時間在午夜之后,則在該特定行上設置您想要的列。 這也應該在事務中完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.