0

您好,我在 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 条新记录。

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

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

谢谢

4

1 回答 1

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% 肯定有更优雅的方式来做这件事,我只是不能真正坐下来规划一个完整的基础设施:)

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

这是一个示例,如果您有一个用户单击链接 www.yoursite.com/show/follow/2... 然后它将该节目和用户添加到下表中,如果关注成功,则向用户发送一条消息。

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

}}

完全未经测试的代码,就像我之前说的,我很确定有更好的方法来做到这一点,但我只是在想我的头脑..

但我敢肯定,从这里,你可以对如何实现这一切有所了解。祝你好运!:)

于 2013-06-09T22:56:40.237 回答