需求:
- 登录用户的好友列表
- 查看用户好友发布的所有动态
- 可以评论用户发表的动态
- 展示动态下的评论
- 可以对用户发表的动态进行点赞/取消点赞、分享、举报
- 可以发布动态
发布动态(文字、图文、列表)
/*
* 发布动态
*/
public function store(Request $request)
{
//接收数据
$params = $request->all();
//获取用户id
$params['user_id'] = (new TokenServe())->checkToken($request->header('token'));
//发布动态 将数据添加入库
Message::create($params);
return ['code'=>200,'msg'=>'发布成功','data'=>[]];
}
用户好友列表+动态+评论+点赞
```
/**
* @param Request $request
* @return array
* 动态列表+评论+是否点赞
*/
public function index(Request $request)
{
//获取token
$token = $request->header('token');
//检测token是否合法 并获取用户id
$user_id = (new TokenServe())->checkToken($token);
//查询该用户的好友
$userData = FriendList::where('user_id', $user_id)->get();
//取出该用户好友的所有id
$friends_id = $userData->pluck('friend_id')->toArray();
//通过该用户好友的id来判断是否 对方是否跟该用户是好友
$friendData = FriendList::whereIn('user_id', $friends_id)->get();
//数据处理
$user_friends_id = [];
foreach ($friendData as $k => $v) {
if ($v->friend_id == $user_id) {
array_push($user_friends_id, $v->user_id);
}
}
array_push($user_friends_id, $user_id);
//查询好友及自己的动态
$data = Message::with('user')
->whereIn('user_id', $user_friends_id)
->where('is_private', 0)
->orderBy('created_at', 'desc')
->paginate(4);
//查询该用户点过赞的动态
$like_data = MessageLike::where('user_id',$user_id)->get();
$like_message_ids = $like_data->pluck('message_id');
//模型关联查询出所有的动态评论
$comment_data = MessageComment::with('user')->get();
//总页数
$last_page = $data->lastPage();
//数据处理
$arr = [];
foreach ($data as $k => $v) {
if ($v->resource_type == 1) {
$resource_path = explode(',', $v->resource_path);
} else {
$resource_path = $v->resource_path;
}
if ($v->address != '') {
$address = mb_substr($v->address, 0, 10) . '...';
} else {
$address = $v->address;
}
if ($v->label_id != null){
//查询该条动态的标签
$label = MessageLabel::whereIn('id',explode(',',$v->label_id))->get();
}else{
$label = null;
}
array_push($arr, [
'id' => $v->id,
'address' => $address,
'content' => $v->content,
'resource_path' => $resource_path,
'resource_type' => $v->resource_type,
'label' => $label,
'created_at' => (new TimeServe())->time($v->created_at),
'avatar_url' => $v->user->avatar_url,
'nickname' => $v->user->nickname,
'user_id' => $v->user->id,
'title' => $v->title,
]);
}
//处理数据 将该动态的评论数据放到该条动态下
foreach ($arr as $k => $v)
{
$arr[$k]['comment'] = [];
foreach ($comment_data as $kk => $vv)
{
if ($v['id'] == $vv->message_id)
{
array_push($arr[$k]['comment'],$vv);
}
}
}
return ['code' => 200, 'msg' => '请求成功', 'data' => ['data'=>$arr,'like_message_id'=>$like_message_ids,'last_page'=>$last_page]];
}
点赞+取消点赞
/*
* 动态点赞
*/
public function like(Request $request)
{
//接收点赞的动态id
$message_id = $request->get('message_id');
//接收是哪个用户点赞的
$user_id = (new TokenServe())->checkToken($request->header('token'));
//查询该用户是否给该动态点过赞
$res = MessageLike::where(['message_id'=>$message_id,'user_id'=>$user_id])->get()->toArray();
if (empty($res)){
//没点过赞 则点赞
MessageLike::create(['message_id'=>$message_id,'user_id'=>$user_id]);
}else{
//点过赞 则取消点赞
MessageLike::where(['message_id'=>$message_id,'user_id'=>$user_id])->delete();
}
}
发表评论
/**
* @param Request $request
* @return array
* 评论
*/
public function messageComment(Request $request)
{
//接收评论的内容
$params = $request->all();
//获取评论的用户
$params['user_id'] = (new TokenServe())->checkToken($request->header('token'));
//添加入库
MessageComment::create($params);
return ['code'=>200,'msg'=>'评论成功','data'=>[]];
}
到这里就差不多完成了,细节需要自己优化,前端页面需要自己编写