Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. <?php
  2.  
  3. protected static function getDefaultQuery(?User $user = null, string $prefix = 'n'): Builder {
  4. $table = \Cache::get('arr')->callback(__METHOD__, function() use($prefix) {
  5. return (new static)->getTable()." as {$prefix}";
  6. });
  7.  
  8. $result = static::query()->from($table);
  9. if (null !== $user && $user->exists) {
  10. $user->addIgnoresToQuery($result, ['user', 'doc', 'category'], $prefix);
  11. }
  12.  
  13. return $result
  14. ->with(['category' => function(HasOne $hasOne) use($user) {
  15. $table = (new Category())->getTable();
  16. $hasOne
  17. ->select("{$table}.*")
  18. ->selectRaw('c.allowed as __user_in_category')
  19. ->leftJoin((new UserCategory)->getTable().' as c', function(JoinClause $join) use($user, $table) {
  20. $join
  21. ->on('c.category_id', '=', "{$table}.id")
  22. ->where('c.user_id', '=', $user->id)
  23. ;
  24. })
  25. ;
  26. }])
  27. ->with(['doc' => function(HasOne $hasOne) use($user) {
  28. $table = (new Doc())->getTable();
  29. $hasOne
  30. ->select("{$table}.*")
  31. ->selectRaw('case `ud`.`allowed` when "b" then "'.UserDoc::BANNED.'" when "1" then `ud`.`join_status` when "0" then "'.UserDoc::READER.'" else "'.UserDoc::NONE.'" end as `__user_in_doc`')
  32. ->leftJoin((new UserDoc())->getTable().' as ud', function(JoinClause $join) use($user, $table) {
  33. $join
  34. ->on('ud.doc_id', '=', "{$table}.id")
  35. ->where('ud.user_id', '=', $user->id)
  36. ;
  37. })
  38. ;
  39. }])
  40. ->with(['user' => function(HasOne $hasOne) use($user) {
  41. $hasOne
  42. ->select(['*'])
  43. ->selectSub(function(QueryBuilder $builder) use($user) {
  44. $builder
  45. ->selectRaw('count(1) as cnt')
  46. ->from((new UserDoc())->getTable().' as ud')
  47. ->leftJoin((new Doc)->getTable().' as d', 'd.id', '=', 'ud.doc_id')
  48. ->whereColumn('ud.user_id', '=', 'users.id')
  49. ->where('ud.allowed', '=', '1')
  50. ->where('ud.join_status', '=', 'admin')
  51. ->where('d.active', '=', '1')
  52. ;
  53. }, '__count_docs')
  54. ->selectRaw('ifnull(f.`value`, 0) as `__in_favourite`')
  55. ->selectRaw($user->id.' as __user_id')
  56. ->leftJoin((new Favourite())->getTable().' as f', function(JoinClause $join) use($user) {
  57. $join
  58. ->where('f.object_type', '=', 'user')
  59. ->where('f.user_id', '=', $user->id)
  60. ->whereColumn('f.object_id', '=', 'users.id')
  61. ;
  62. })
  63. ;
  64. }])
  65. ->with(['text' => function(HasOne $hasOne){
  66. $hasOne->select(['news_id', 'before_cut']);
  67. }])
  68. ->with(['stat' => function(HasOne $hasOne){
  69. $hasOne->select(['news_id', 'hits']);
  70. }])
  71. ->with(['__comments_show' => function(HasOne $hasOne) use($user) {
  72. $table = (new CommentShow())->getTable();
  73. $hasOne
  74. ->select(["{$table}.news_id"])
  75. ->selectSub(function(QueryBuilder $builder) use($table) {
  76. $builder
  77. ->selectRaw('count(1) as cnt')
  78. ->from((new Comment)->getTable().' as c')
  79. ->whereColumn('c.news_id', '=', "{$table}.news_id")
  80. ->whereColumn('c.id', '>', "{$table}.comment_id")
  81. ->where('c.active', '=', '1')
  82. ;
  83. }, '__count')
  84. ->where("{$table}.user_id", '=', $user->id)
  85. ->groupBy(["{$table}.news_id"])
  86. ;
  87. }])
  88. ->with(['__vote' => function(HasOne $hasOne) use($user) {
  89. $vote = (new Vote)->getTable();
  90. $voteIp = (new VoteIp())->getTable();
  91. $news = (new Post())->getTable();
  92. $hasOne
  93. ->select("{$vote}.object_id")
  94. ->selectRaw('if(v.sign is not null, v.sign, 0) as __vote')
  95. ->selectRaw("if({$voteIp}.updated is not null, 999, 0) as __vote_ip")
  96. ->fromRaw("(select id as object_id from {$news}) as vote")
  97. ->leftJoin($vote.' as v', function (JoinClause $join) use($vote) {
  98. $join
  99. ->where('v.object_type', '=', 'news')
  100. ->on('v.object_id', '=', "{$vote}.object_id")
  101. ;
  102. })
  103. ->leftJoin($voteIp, function(JoinClause $join) use($vote, $voteIp) {
  104. $join
  105. ->where("{$voteIp}.object_type", '=', 'news')
  106. ->on("{$voteIp}.object_id", '=', "{$vote}.object_id")
  107. ;
  108. })
  109. ->where('v.user_id', '=', $user->id)
  110. ->where("{$voteIp}.ip", '=', \ip2long(Request::ip()))
  111. ;
  112. }])
  113. ->with(['__favourite' => function(HasOne $hasOne) use($user) {
  114. $hasOne
  115. ->where('user_id', '=', $user->id)
  116. ;
  117. }])
  118. ;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement