zoukankan      html  css  js  c++  java
  • laravel 分类的列表查询

    public function index(Request $request, ResponseFactoryContract $response, QuestionModel $questionModel)
    {
    $userID = $request->user('api')->id ?? 0;
    $limit = max(1, min(30, $request->query('limit', 15)));
    $offset = max(0, $request->query('offset', 0));
    $subject = $request->query('subject');
    $map = [
    'all' => function ($query) {
    $query->orderBy('id', 'desc');
    },
    'new' => function ($query) {
    $query->where('answers_count', 0)
    ->orderBy('id', 'desc');
    },
    'hot' => function ($query) use ($questionModel) {
    $query->whereBetween('created_at', [
    $questionModel->freshTimestamp()->subMonth(1),
    $questionModel->freshTimestamp(),
    ])->where('answers_count', '!=', 0);
    $query->orderBy('answers_count', 'desc');
    },
    'reward' => function ($query) {
    $query->where('amount', '!=', 0)
    ->orderBy('id', 'desc');
    },
    'excellent' => function ($query) {
    $query->where('excellent', '!=', 0)
    ->orderBy('id', 'desc');
    },
    'follow' => function ($query) use ($userID) {
    $query->whereExists(function ($query) use ($userID) {
    $query->from('question_watcher')
    ->where('question_watcher.user_id', '=', $userID)
    ->whereRaw('question_watcher.question_id = questions.id');
    });
    },
    ];
    $type = in_array($type = $request->query('type', 'new'), array_keys($map)) ? $type : 'new';
    call_user_func($map[$type], $query = $questionModel
    ->whereDoesntHave('blacks', function ($query) use ($userID) {
    $query->where('user_id', $userID);
    })
    ->when($subject, function ($query) use ($subject) {
    return $query->where('subject', 'like', '%'.$subject.'%');
    })
    ->limit($limit)
    ->offset($offset));
    $questions = $query->get();
    $questions->load('user');

    return $response->json($questions->map(function (QuestionModel $question) use ($userID) {
    if ($question->anonymity && $question->user_id !== $userID) {
    $question->addHidden('user');
    $question->user_id = 0;
    }

    $question->answer = $question->answers()
    ->whereDoesntHave('blacks', function ($query) use ($userID) {
    $query->where('user_id', $userID);
    })
    ->with('user')
    ->orderBy('id', 'desc')
    ->first();

    if ($question->answer) {
    if ($question->answer->anonymity && $question->answer->user_id !== $userID) {
    $question->answer->addHidden('user');
    $question->answer->user_id = 0;
    }
    $question->answer->liked = (bool) $question->answer->liked($userID);
    $question->answer->collected = (bool) $question->answer->collected($userID);
    $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $userID)->first();
    $question->look && $question->answer->could = true;

    if ($question->look && $question->answer->invited && (! $question->answer->onlookers()->where('user_id', $userID)->first()) && $question->answer->user_id !== $userID && $question->user_id !== $userID) {
    $question->answer->could = false;
    $question->answer->body = null;
    }
    }

    return $question;
    }))->setStatusCode(200);
    }
  • 相关阅读:
    判断字符中是否包含汉字
    since I lived here; since I have lived here. 的区别? 从语法上看, 为啥会有这样的区别?
    have married; have been married; 到底是结婚了没?还是已经离婚了?
    C#项目依据 x86 x64 配置不同的引用
    现在完成时可以表示过去事件对现在的影响/效果. 过去完成时也可以起相同的作用!!!!
    使用现在完成时的常见错误(转发)
    去除win10下的缺省ctrl加空格功能
    appear + 表语 与 appear to be + "表语" 的区别; get hurt与 get to be hurt的区别
    ssm搭建的一个web应用的工作流程
    return和finally究竟谁先执行,还有return是怎么返回数据的
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10408035.html
Copyright © 2011-2022 走看看