你好我在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条新记录。
我想要桌子的方式不起作用,请帮助。
我希望你理解我的问题,而不是英语。 如果您需要更多信息,请咨询并提供最佳实践帮助。
由于
答案 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();
}}
完全未经测试的代码,就像我之前说的那样,我非常确定有更好的方法可以做到这一点,但我只是想到了我的头脑..
但我相信从这里开始,您可以了解如何实现这一切。 祝好运! :)