【问题标题】:Laravel 5 - softDeleting a userLaravel 5 - 软删除用户
【发布时间】:2015-08-25 12:51:41
【问题描述】:

当我软删除用户时,相关数据会怎样?例如,我有一个捐赠表,我们在其中跟踪用户为每个活动提供的所有捐赠。

public function user()
    {
        return $this->belongsTo('App\User');
    }

捐赠表架构

Schema::create('donations', function(Blueprint $table)
        {
            $table->increments('id');
            $table->integer('campaign_id');
            $table->integer('user_id');
            $table->float('amount');
            $table->timestamps();
        });

因此,如果用户软删除,那么活动的总金额将如何受到影响。还有一个 cmets 表,用于跟踪用户使用的所有 cmets。我们正在使用 softdelete,以便我们稍后可以重新激活该帐户。这是当前场景中的好方法,还是我可以使用用户表中的状态字段来停用或重新激活用户。

【问题讨论】:

  • 我建议使用另一个名为deleted_at的时间戳,如果这是NULL,那么用户不会被删除,否则用户会被删除。当您想重新激活帐户时,您始终可以将 deleted_at 字段设置回 NULL
  • 捐款必须保存在 IMO 数据库中。即使关联的用户被删除。我认为,您在这里使用了适当的方法。

标签: php laravel laravel-5 eloquent


【解决方案1】:

当用户被软删除时,相关数据不会发生任何事情。软删除唯一要做的就是将列deleted_at(用户表)设置为当前日期时间(而不是空)。我不知道您如何计算总金额等,但如果这些值存储在 DB 中,它们将保持不变。

如果你想,例如软删除用户时也删除所有用户 cmet,您可以使用查看 here 如何订阅删除/删除事件并使用它来触发相关模型的删除。

【讨论】:

  • 总额使用$campaign->donations->sum('amount')
  • 所以这不会改变并计算表格中的所有捐赠,除非所有用户的捐赠也将被软删除。
  • 当一个被软删除的用户尝试登录时会发生什么,他的记录是否也在 Auth 控制器中被检查?有什么办法可以让我给他们一个选项来重新激活他们的帐户
  • 如果您使用的是开箱即​​用的授权,我很确定软删除的用户无法登录。这可能可以以某种方式克服,但我不能给你具体的答案。我会通过向用户发送电子邮件并发送带有一些帐户重新激活链接的消息来做到这一点。
  • 我使用的是 laravel 自带的默认授权
【解决方案2】:

由于您使用的是soft deletes,您确实知道软删除只会影响一条记录,在这种情况下,就是您的用户。

那么,当您软删除用户时,捐款和 cmets 会发生什么?

什么都没有。

您是在软删除用户,而不是在进行级联软删除。

如果您需要软删除相关数据,则必须手动进行

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2015-10-06
    • 2018-02-12
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多