我看到这里没有人解决这个事实,通知通常会重新发生,也就是说。即将到来的交易通知总是相同的,但具有不同的交易ID或日期。因此:{你有一个新的即将到来的付款:@paymentID,截止日期为@dueDate}。 在不同的表有文本也可以
- 帮助,如果你想以后更改通知文本上
- 使得应用多语种更容易,因为我只是一个语言代码层通知表和检索合适的串
因此我也作了表为那些抽象通知,这是刚下用户连接用中间表,其中一个通知类型可以在多个时间发送到一个用户。我还将通知链接到用户,而不是通过外键ID,但是我为所有通知和full_text编制了索引这些代码的varchar字段的通知代码,以提高读取速度。由于这样的事实,这些通知需要在指定的时间发送,也更容易为开发人员编写
NotificationService::sendNew(Notification::NOTE_NEW_PAYMENT, ['paymentId'] => 123, ['dueDate'] => Carbon::now(), 'userIdToSendTo');
现在,因为我的消息都将在他们的自定义数据,插入到字符串,正如你可以从第二个参数中预先看到的那样,那么我将它们存储在一个数据库blob中。这样
$values = base64_encode(serialize($valuesInTextArray));
这是因为我希望去耦其他表的通知,因此我不想克里特unnessecary从和通知表FK关系,这样我就可以例如说,通知234连接到交易23,然后加入并获得该交易ID。解耦可以消除管理这些关系的开销。缺点是,删除通知时几乎不可能,例如删除一个事务时,但在我的用例中,我决定,这不是必需的。
我将按照以下方式检索并填充App端的文本。 PS。我正在使用某人的vksprintf函数(https://github.com/washingtonpost/datawrapper/blob/master/lib/utils/vksprintf.php),道具给他!
$valuesToFillInString = unserialize(base64_decode($notification->values));
vksprintf($notificationText->text, $valuesToFillInString)
还要注意哪些字段I指数,因为我要找到或排序它们
我的数据库设计如下
============ ==================
表:用户
==============================
表:通知
- ID(PK )
- USER_ID(FK,索引)
- text_id(FK - NotificationTexts表)
- 值(BLOB)[含有值的阵列,以输入到所述文本串]
- createdDateTime(日期时间)
- 读取(布尔值)
[ClusterIndex] =>(USER_ID,createdDateTime)
======================== ======
表:NotificationTexts
- ID(PK)
- text_id(uniquem索引)
- 文本(VARCHAR){你有一个即将到来的新的支付:@paymentID,与@dueDate的到期日}]
- 说明(VARCHAR,可为空)笔记开发人员,信息栏]
为什么需要此连接?只需将阅读字段放在通知表中,您就可以节省时间和空间。 – ash 2010-07-13 14:17:07
'notificationsread'表格将为每个用户只存储1行。当用户将他的通知发送到最近的通知ID时,哪个会被更新。 所以我们实际上并不需要这个领域本身。感谢您的评论:) – 2010-07-14 15:08:15
我觉得'Jasie'的意思是说,为什么你甚至需要'notificationRead'表。只在''notification'表中添加'readStatus'字段是否有问题?因此,当通知创建时,其'readStatus'为false,并且只有在用户打开通知页面时才变为'true'。更新了 – 2010-09-23 16:32:59