我目前正在更多地使用Laravels通知包,但是以下问题困扰了我数周:我应该在通知中实际存储什么? 有时通知与特定模型有关,但不总是如此。
示例:您的博客文章已发布。或做某事时出错。该条目已删除。
有时这些模型具有诸如Post→Category之类的关系,并且消息应如下所示:您在“ A Category”类别中的博客文章已发布。
现在是问题:
什么是将来扩展规模以及将来扩展现有通知的最佳实践?
答案 0 :(得分:1)
因此,您建议选择: 1.保存包括显示所有必需数据的通知 要么 2.保存仅带有引用的通知,以便以后可以呈现消息
因此,让我们考虑一下这两种选择的优缺点。
此外,如果您要在数据库中序列化通知,则以后再更改其模型(例如,删除字段)时,将无法反序列化它们。
为了采用选项2,实际上无法避免额外的数据库负载。
最简单的方法是解决通知中的关系,即在呈现通知数组时查询关系,但这将导致系统对每个关系进行附加查询。
NotificationController.php
$user = App\User::find(1);
foreach ($user->notifications as $notification) {
echo $notification->type;
}
MyNotification.php
public function toArray($notifiable)
{
$someRelatedModel = Model::find($this->someRelatedModel_id);
return [
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
'relatedModelData' => $someRelatedModel->data,
];
}
更好的解决方案是调整当前用于检索通知的查询,这样它将包括初始负载上的关系。
NotificationController.php
$notification = App\Notification::byUserId(1)->with('someRelatedModel);
有关更多信息,请参见eager loading。
Tl; dr考虑到以上几点,我将选择选项2;仅保留呈现通知时所需模型的引用。