因此,我要在通知电子邮件中添加一个取消订阅按钮。到目前为止,没有问题,直到我尝试执行它为止。我试图在Laravel的订户控制器中添加一个取消订阅的方法,但是它似乎并没有删除表中的记录。当我尝试删除时,表中的记录不会被删除。相反,它将更新我的表的列。
这是我的表格列:
| id |名称|电邮|确认令牌| unsubscribe_token | created_at | Deleted_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] );
任何帮助将不胜感激。
答案 0 :(得分:0)
这称为“软删除”。默认情况下,软删除的项目将从将来的查询中排除,从而有效地删除它们。
Laravel docs cover more about soft deletion。您可以使用forceDelete
实际删除表中的行。
关于软删除的好处是,您最终不会摆脱将来可能需要的数据。例如,如果有人设法“删除”您的所有项目,则只需撤消所有“ deleted_at”修改,而不必从备份中恢复。
它还跟踪删除项目的时间,这对您来说可能是有趣的分析。
如果以后要查询包括软删除项目的项目,则可以使用withTrashed来检索所有项目,而与delete_at值无关。
答案 1 :(得分:0)
有两种类型的删除,一种是永久删除,它从数据库中删除记录,您将无法再次检索该记录;第二种是软删除,它仅使用当前时间戳更新表中的delete_at列。如果您在模型中使用特征使用softdelete,则软删除将自动在laravel中工作,但是如果您要永久删除该特征,只需从laravel中的模型中删除该特征,它将永久删除该记录。