HashtagRelatedService.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php
  2. namespace App\Services;
  3. use DB;
  4. use App\StatusHashtag;
  5. use App\Models\HashtagRelated;
  6. class HashtagRelatedService
  7. {
  8. public static function get($id)
  9. {
  10. $tag = HashtagRelated::whereHashtagId($id)->first();
  11. if(!$tag) {
  12. return [];
  13. }
  14. return $tag->related_tags;
  15. }
  16. public static function fetchRelatedTags($tag)
  17. {
  18. $res = StatusHashtag::query()
  19. ->select('h2.name', DB::raw('COUNT(*) as related_count'))
  20. ->join('status_hashtags as hs2', function ($join) {
  21. $join->on('status_hashtags.status_id', '=', 'hs2.status_id')
  22. ->whereRaw('status_hashtags.hashtag_id != hs2.hashtag_id');
  23. })
  24. ->join('hashtags as h1', 'status_hashtags.hashtag_id', '=', 'h1.id')
  25. ->join('hashtags as h2', 'hs2.hashtag_id', '=', 'h2.id')
  26. ->where('h1.name', '=', $tag)
  27. ->groupBy('h2.name')
  28. ->orderBy('related_count', 'desc')
  29. ->limit(30)
  30. ->get();
  31. return $res;
  32. }
  33. }