Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- protected static function getDefaultQuery(?User $user = null, string $prefix = 'n'): Builder {
- $table = \Cache::get('arr')->callback(__METHOD__, function() use($prefix) {
- return (new static)->getTable()." as {$prefix}";
- });
- $result = static::query()->from($table);
- if (null !== $user && $user->exists) {
- $user->addIgnoresToQuery($result, ['user', 'doc', 'category'], $prefix);
- }
- return $result
- ->with(['category' => function(HasOne $hasOne) use($user) {
- $table = (new Category())->getTable();
- $hasOne
- ->select("{$table}.*")
- ->selectRaw('c.allowed as __user_in_category')
- ->leftJoin((new UserCategory)->getTable().' as c', function(JoinClause $join) use($user, $table) {
- $join
- ->on('c.category_id', '=', "{$table}.id")
- ->where('c.user_id', '=', $user->id)
- ;
- })
- ;
- }])
- ->with(['doc' => function(HasOne $hasOne) use($user) {
- $table = (new Doc())->getTable();
- $hasOne
- ->select("{$table}.*")
- ->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`')
- ->leftJoin((new UserDoc())->getTable().' as ud', function(JoinClause $join) use($user, $table) {
- $join
- ->on('ud.doc_id', '=', "{$table}.id")
- ->where('ud.user_id', '=', $user->id)
- ;
- })
- ;
- }])
- ->with(['user' => function(HasOne $hasOne) use($user) {
- $hasOne
- ->select(['*'])
- ->selectSub(function(QueryBuilder $builder) use($user) {
- $builder
- ->selectRaw('count(1) as cnt')
- ->from((new UserDoc())->getTable().' as ud')
- ->leftJoin((new Doc)->getTable().' as d', 'd.id', '=', 'ud.doc_id')
- ->whereColumn('ud.user_id', '=', 'users.id')
- ->where('ud.allowed', '=', '1')
- ->where('ud.join_status', '=', 'admin')
- ->where('d.active', '=', '1')
- ;
- }, '__count_docs')
- ->selectRaw('ifnull(f.`value`, 0) as `__in_favourite`')
- ->selectRaw($user->id.' as __user_id')
- ->leftJoin((new Favourite())->getTable().' as f', function(JoinClause $join) use($user) {
- $join
- ->where('f.object_type', '=', 'user')
- ->where('f.user_id', '=', $user->id)
- ->whereColumn('f.object_id', '=', 'users.id')
- ;
- })
- ;
- }])
- ->with(['text' => function(HasOne $hasOne){
- $hasOne->select(['news_id', 'before_cut']);
- }])
- ->with(['stat' => function(HasOne $hasOne){
- $hasOne->select(['news_id', 'hits']);
- }])
- ->with(['__comments_show' => function(HasOne $hasOne) use($user) {
- $table = (new CommentShow())->getTable();
- $hasOne
- ->select(["{$table}.news_id"])
- ->selectSub(function(QueryBuilder $builder) use($table) {
- $builder
- ->selectRaw('count(1) as cnt')
- ->from((new Comment)->getTable().' as c')
- ->whereColumn('c.news_id', '=', "{$table}.news_id")
- ->whereColumn('c.id', '>', "{$table}.comment_id")
- ->where('c.active', '=', '1')
- ;
- }, '__count')
- ->where("{$table}.user_id", '=', $user->id)
- ->groupBy(["{$table}.news_id"])
- ;
- }])
- ->with(['__vote' => function(HasOne $hasOne) use($user) {
- $vote = (new Vote)->getTable();
- $voteIp = (new VoteIp())->getTable();
- $news = (new Post())->getTable();
- $hasOne
- ->select("{$vote}.object_id")
- ->selectRaw('if(v.sign is not null, v.sign, 0) as __vote')
- ->selectRaw("if({$voteIp}.updated is not null, 999, 0) as __vote_ip")
- ->fromRaw("(select id as object_id from {$news}) as vote")
- ->leftJoin($vote.' as v', function (JoinClause $join) use($vote) {
- $join
- ->where('v.object_type', '=', 'news')
- ->on('v.object_id', '=', "{$vote}.object_id")
- ;
- })
- ->leftJoin($voteIp, function(JoinClause $join) use($vote, $voteIp) {
- $join
- ->where("{$voteIp}.object_type", '=', 'news')
- ->on("{$voteIp}.object_id", '=', "{$vote}.object_id")
- ;
- })
- ->where('v.user_id', '=', $user->id)
- ->where("{$voteIp}.ip", '=', \ip2long(Request::ip()))
- ;
- }])
- ->with(['__favourite' => function(HasOne $hasOne) use($user) {
- $hasOne
- ->where('user_id', '=', $user->id)
- ;
- }])
- ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement