AttentionController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\Attention;
  4. use App\Models\Question;
  5. use App\Models\Tag;
  6. use App\Models\User;
  7. use Illuminate\Http\Request;
  8. use App\Http\Requests;
  9. use App\Http\Controllers\Controller;
  10. class AttentionController extends Controller
  11. {
  12. /**
  13. * 添加模型的关注包含问题、用户等
  14. * @param \Illuminate\Http\Request $request
  15. * @return \Illuminate\Http\Response
  16. */
  17. public function store($source_type,$source_id,Request $request)
  18. {
  19. if($source_type === 'question'){
  20. $source = Question::find($source_id);
  21. $subject = $source->title;
  22. }else if($source_type === 'user'){
  23. $source = User::find($source_id);
  24. $subject = $source->name;
  25. }else if($source_type==='tag'){
  26. $source = Tag::find($source_id);
  27. $subject = $source->name;
  28. }
  29. if(!$source){
  30. abort(404);
  31. }
  32. /*再次关注相当于是取消关注*/
  33. $attention = Attention::where("user_id",'=',$request->user()->id)->where('source_type','=',get_class($source))->where('source_id','=',$source_id)->first();
  34. if($attention){
  35. $attention->delete();
  36. if($source_type==='user'){
  37. $source->userData->decrement('followers');
  38. }else{
  39. $source->decrement('followers');
  40. }
  41. return response('unfollowed');
  42. }
  43. $data = [
  44. 'user_id' => $request->user()->id,
  45. 'source_id' => $source_id,
  46. 'source_type' => get_class($source),
  47. ];
  48. $attention = Attention::create($data);
  49. if($attention){
  50. switch($source_type){
  51. case 'question' :
  52. $this->notify($request->user()->id,$source->user_id,'follow_question',$subject,$source->id);
  53. $this->doing($request->user()->id,'follow_question',get_class($source),$source_id,$subject);
  54. $source->increment('followers');
  55. break;
  56. case 'user':
  57. $source->userData->increment('followers');
  58. $this->notify($request->user()->id,$source->id,'follow_user');
  59. break;
  60. case 'tag':
  61. $source->increment('followers');
  62. break;
  63. }
  64. }
  65. return response('followed');
  66. }
  67. }