繁体   English   中英

Laravel确实更新而不是删除

[英]Laravel does update instead of delete

因此,我要在通知电子邮件中添加一个取消订阅按钮。 到目前为止,没有问题,直到我尝试执行它为止。 我试图在Laravel的订户控制器中添加一个取消订阅的方法,但是它似乎并没有删除表中的记录。 当我尝试删除时,表中的记录不会被删除。 相反,它将更新我的表的列。

这是我的表格列:

| id | 名称| 电邮| 确认令牌| unsubscribe_token | created_at | delete_at |

它使用我删除记录的时间更新在删除的列。 换句话说,我要删除的记录仍然存在于我的表中,仅更新了在删除的列。

这里可能出什么问题? 下面提供了代码。 我正在使用Laravel 5.5和PyroCMS 3.3。 我认为Pyro不应成为这里的主要问题,因为这些代码更多地集中在Laravel上。

在我的路线上

'subscribers/u/{token}/id/{id}' => [
            'as'    => 'sands.module.communications::subscribers.unsubscribe',
            'uses'  => 'Sands\CommunicationsModule\Http\Controller\SubscribersController@unsubscribe'

在我的控制器上:

public function unsubscribe(Request $request, MessageBag $messages, $token, $id)
    {

        $subscriber = SubscriberModel::whereStatus('active')->whereId($id)->whereUnsubscribeToken($token)->first();

        if(empty($token) or empty($subscriber))
        {
            $messages->error(trans('sands.module.communications::addon.subscribers.invalid-confirmation'));
            return redirect(url('/'));
        }

        $subscriber->delete();

        $messages->success(trans('sands.module.communications::addon.subscribers.unsubscribed'));
        return redirect(url('/'));
    }

在我的通知电子邮件中:

public function toMail($notifiable)
    {
    //tender name
    $tender = $this->title;

    //tender url
    $url = url($this->tender->site_link);

    // unsubscribe url
    $url_unsubscribe = route('sands.module.communications::subscribers.unsubscribe', 
    [
        'token' => $this->subscriber->unsubscribe_token, 
        'id' => $this->subscriber->id]);

      return (new MailMessage)
      ->markdown( 'mails.tender', [
          'url'         => $url,
          'url_unsubscribe' => $url_unsubscribe,
          'tender' => $tender] );

任何帮助,将不胜感激。

这称为“软删除”。 默认情况下,软删除的项目将从将来的查询中排除,从而有效地删除它们。

Laravel文档涵盖了有关软删除的更多信息 您可以使用forceDelete实际上删除表中的行。

关于软删除的好处是,您最终不会摆脱将来可能需要的数据。 例如,如果某人设法“删除”您的所有项目,则只需撤消所有“ deleted_at”修改,而不必从备份中恢复。

它还会跟踪删除项目的时间,这对您来说可能是有趣的分析。

如果将来要查询包括软删除项目的项目,则可以使用withTrashed检索所有项目,而与delete_at值无关。

删除有两种类型,一种是永久删除,它从数据库中删除记录,您将无法再次检索该记录;另一种是软删除,它仅使用当前时间戳更新表中的delete_at列。 如果您在模型中使用特征使用softdelete,则软删除将自动在laravel中工作,但是如果您要永久删除该特征,只需从laravel中的模型中删除该特征,它将永久删除该记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM