DiscoverCategory.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\{Status, StatusHashtag};
  5. class DiscoverCategory extends Model
  6. {
  7. protected $fillable = ['slug'];
  8. public function media()
  9. {
  10. return $this->belongsTo(Media::class);
  11. }
  12. public function url()
  13. {
  14. return url('/discover/c/'.$this->slug);
  15. }
  16. public function editUrl()
  17. {
  18. return url('/i/admin/discover/category/edit/' . $this->id);
  19. }
  20. public function thumb()
  21. {
  22. return $this->media->thumb();
  23. }
  24. public function mediaUrl()
  25. {
  26. return $this->media->url();
  27. }
  28. public function items()
  29. {
  30. return $this->hasMany(DiscoverCategoryHashtag::class, 'discover_category_id');
  31. }
  32. public function hashtags()
  33. {
  34. return $this->hasManyThrough(
  35. Hashtag::class,
  36. DiscoverCategoryHashtag::class,
  37. 'discover_category_id',
  38. 'id',
  39. 'id',
  40. 'hashtag_id'
  41. );
  42. }
  43. public function posts()
  44. {
  45. return Status::select('*')
  46. ->join('status_hashtags', 'statuses.id', '=', 'status_hashtags.status_id')
  47. ->join('hashtags', 'status_hashtags.hashtag_id', '=', 'hashtags.id')
  48. ->join('discover_category_hashtags', 'hashtags.id', '=', 'discover_category_hashtags.hashtag_id')
  49. ->join('discover_categories', 'discover_category_hashtags.discover_category_id', '=', 'discover_categories.id')
  50. ->where('discover_categories.id', $this->id);
  51. }
  52. }