通知系统的结构

时间:2013-06-09 14:12:43

标签: php notifications laravel laravel-4

你好我在laravel 4中制作电影和电视节目网页,用户可以按照电视节目,我将值存储在用户表中,例如:

user:jhon
password:secret
tvshow:1,2,7,3

如果用户正在关注电视节目,其ID为1和2以及7和3,那么用户将关注4个电视节目,如果这是最佳做法但不喜欢它(如果有更好的做法请通知我)

我想建立一个新的通知系统,其中有多种类型的通知:

| @this user mentioned you in a comment       |
|_____________________________________________|
| A new episode of #your_tv_show comes today  | 
|_____________________________________________|
| @user send you a message                    | 
|_____________________________________________|
| @user its following you                     |
\_____________________________________________/

我在思考像:

通知表

|  id  |from_id | to_id |   type   |   read |
|  3   |    1   |   3   |  message |    0   |

但是我将如何获得它的通知链接 http://www.mypage.com/username/meesage/3

例如,当我想要提供类似新剧集的通知时,我有300个用户关注#tvshow,我需要在表格中制作300条新记录。

我想要桌子的方式不起作用,请帮助。

我希望你理解我的问题,而不是英语。 如果您需要更多信息,请咨询并提供最佳实践帮助。

由于

1 个答案:

答案 0 :(得分:2)

通知是一个大表,可以获得300多条消息,每次节目发送更新都没问题,只要你保持干净,删除“看过”的帖子,每周一次或其他什么。

除非将其附加到所有关注者身上,否则没有其他方法可以真正做出“看到”的消息。

你可以做一个附加到节目的全局消息,然后只需向所有粉丝发送一次,而不需要消息表,但是你将无法做到整个'看到'或'看不见'位。知道我的意思吗?

但我会为以下节目设置一个表格和模型...... 称之为以下或其他...... 像这样......

ID  |   user_id    |  show_id   | 
1          22            3
2          12            4  
3          22            12

然后你可以在你的用户模型中设置一个关系...并且摆脱整个逗号分隔的东西,如果网站变大,这可能会变得非常混乱。

public function showsFollowing(){
   return $this->hasMany('Following', 'user_id');   
 }

在你的电视节目模特中......

 public function getFollowers(){
   return $this->hasMany('Following','show_id');
 }

这将允许您获取用户所关注的所有ID。 或者获取用户所关注的所有ID ...

然后您可以随意使用该数据。

我95%肯定有更好的方式来做这件事,我只是不能完成坐下来规划完整的基础设施的任务:)

另外....对于消息,您需要创建一个消息模型,然后每次在任何控制器中执行任何操作时......例如当有人关注或添加或删除任何内容时....在消息模型中创建一个新的系统消息.......

下面是一个例子,如果您有用户点击链接www.yoursite.com/show/follow/2 ... 然后将show和user添加到Following表中,如果后续成功,则向用户发送消息。

public function get_follow($id){

$follow = New Following;
$follow->user_id = Auth::user()->id;
$follow->show_id = $id; //pass the show id 
$check = $follow->save();
  if($check){
   $message = New Message;
   $message->user_id = Auth::user()->id;
   $message->body = "You have followed ".Show::find($id)->showName;
   $message->seen = 0;
   $message->save();}

Return Redirect::back();

 }

然后,只要您有要发送节目的消息,就可以批量发送... 不知道你会在哪里做....也许你可以有一个控制器,用于上传新剧集....到一个节目......然后每次你做,它执行消息批处理....这条线......

public function post_uploadNewEpisode($id){
  //Obviously you would have input handling for file upload etc
  //But we're not covering that part here....just the message part.

  $show = Show::find($id);
  $message = "There is a new episode of ".$show->showName." available for download!";

 $followers = Followers::where('show_id','=',$id)->get();
 //Iterate over follower ids, and send a message to each...
 foreach($followers as $val){

  $message = New Message;
  $message->user_id = $val->user_id;   
  $message->body = $message;
  $message->seen = 0;
  $message->save();

}}

完全未经测试的代码,就像我之前说的那样,我非常确定有更好的方法可以做到这一点,但我只是想到了我的头脑..

但我相信从这里开始,您可以了解如何实现这一切。 祝好运! :)