通知是一个包含 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();
}}
完全未经测试的代码,就像我之前说的,我很确定有更好的方法来做到这一点,但我只是在想我的头脑..
但我敢肯定,从这里,你可以对如何实现这一切有所了解。祝你好运!:)