UserData.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Relations\BelongsToUserTrait;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Facades\Cache;
  6. class UserData extends Model
  7. {
  8. use BelongsToUserTrait;
  9. protected $table = 'user_data';
  10. public $timestamps = false;
  11. protected $primaryKey = 'user_id';
  12. /**
  13. * The attributes that are mass assignable.
  14. *
  15. * @var array
  16. */
  17. protected $fillable = [
  18. 'user_id',
  19. 'coins',
  20. 'credits',
  21. 'authentication_status',
  22. 'last_login_ip',
  23. 'registered_at',
  24. 'mobile_status',
  25. 'last_visit'
  26. ];
  27. /**
  28. * The attributes excluded from the model's JSON form.
  29. *
  30. * @var array
  31. */
  32. protected $hidden = [];
  33. /*文章活跃用户*/
  34. public static function activeInArticles($size = 8)
  35. {
  36. $list = Cache::remember('active_in_articles', 10, function () use ($size) {
  37. return self::leftJoin('users', 'users.id', '=', 'user_data.user_id')
  38. ->where('users.status', '>', 0)->where('user_data.articles', '>', 0)
  39. ->orderBy('user_data.articles', 'DESC')
  40. ->orderBy('users.created_at', 'DESC')
  41. ->select('users.id', 'users.name', 'users.title', 'user_data.coins', 'user_data.credits',
  42. 'user_data.followers', 'user_data.supports', 'user_data.answers', 'user_data.articles',
  43. 'user_data.authentication_status')
  44. ->take($size)->get();
  45. });
  46. return $list;
  47. }
  48. /*活跃用户*/
  49. public static function activities($size)
  50. {
  51. return self::leftJoin('users', 'users.id', '=', 'user_data.user_id')
  52. ->where('users.status', '>', 0)
  53. ->orderBy('user_data.answers', 'DESC')
  54. ->orderBy('user_data.articles', 'DESC')
  55. ->orderBy('users.updated_at', 'DESC')
  56. ->select('users.id', 'users.name', 'users.title','users.qrcode', 'user_data.coins', 'user_data.credits',
  57. 'user_data.followers', 'user_data.supports', 'user_data.answers', 'user_data.articles',
  58. 'user_data.authentication_status')
  59. ->take($size)->get();
  60. }
  61. /*财富榜*/
  62. public static function topCoins($size)
  63. {
  64. return self::leftJoin('users', 'users.id', '=', 'user_data.user_id')
  65. ->where('users.status', '>', 0)->where('user_data.articles', '>', 0)
  66. ->orderBy('user_data.coins', 'DESC')
  67. ->select('users.id', 'users.name', 'users.title', 'user_data.coins', 'user_data.credits',
  68. 'user_data.followers', 'user_data.supports', 'user_data.answers', 'user_data.articles',
  69. 'user_data.authentication_status')
  70. ->take($size)->get();
  71. }
  72. /*排行榜*/
  73. public static function top($type, $size)
  74. {
  75. return self::leftJoin('users', 'users.id', '=', 'user_data.user_id')
  76. ->where('users.status', '>', 0)
  77. ->orderBy('user_data.' . $type, 'DESC')
  78. ->orderBy('user_data.last_visit', 'DESC')
  79. ->select('users.id', 'users.name', 'users.title','users.qrcode', 'user_data.coins', 'user_data.credits',
  80. 'user_data.followers', 'user_data.supports', 'user_data.answers', 'user_data.articles',
  81. 'user_data.authentication_status')
  82. ->take($size)->get();
  83. }
  84. /*用户采纳率*/
  85. public function adoptPercent()
  86. {
  87. return round($this->adoptions / $this->answers, 2) * 100;
  88. }
  89. public static function hottest($size = 20)
  90. {
  91. return self::where("status", ">", 0)->leftJoin("users", function ($join) {
  92. $join->on("users.id", '=', "user_data.user_id")
  93. ->where("users.status", ">", 0);
  94. })->orderBy('answers', 'desc')->orderBy('credits', 'desc')->take($size)->get();
  95. }
  96. }