繁体   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