簡體   English   中英

如何為 Laravel 中的一百萬條記錄定期更新數據庫表的列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM