Php 通知制度的结构

Php 通知制度的结构,php,notifications,laravel,laravel-4,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 | |_

您好,我正在制作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   |
但是我怎样才能得到这样的通知链接呢

例如,我有300个用户在关注《电视秀》,当我想发出一个通知,比如新的一集时,我需要在表中创建300条新记录

我想要的那张桌子就是不行,请帮帮我

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


感谢

通知是一个可以收到300多条消息的大表,每次节目发送更新都可以,只要你保持干净,每周删除一次“看到的”帖子或其他内容

没有其他方法可以在不将其附加到所有追随者的情况下真正执行“已看到”消息

你可以做一个附加到节目的全局消息,然后只发送一次给所有追随者,而不需要消息表,但这样你就无法完成整个“看到”或“看不见”部分。知道我的意思吗

但是我会为下面的节目设置一个表格和模型。。。 叫它Following或其他什么。。。。 就这样

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添加到下表中,并在后续操作成功时向用户发送消息

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();

}}
完全未经测试的代码,就像我之前所说的,我非常确定有更好的方法来实现这一点,但我只是想了想

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

我当然不是专家,但我认为将客户数据与公共数据分离会有很大帮助。您不能使用客户端在他们登录后启动的脚本来检查有关他们喜欢的电影的新通知。像搜索与此人相关的所有电影一样,然后在电影表/db中搜索新的通知..?我希望每5秒自动更新一次通知,该通知可能存在读取或未读取的问题。实现这一目标是令人钦佩的,但是在一个我认为非常大的网站上,不花一分钱几乎是不可能的。好吧,这是个好主意,但我认为在messagens表中有一个类型字段,有必要生成指向消息相应页面的链接,我想我可以得到一个基本的通知系统,并为其添加一些内容,谢谢