博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel 多检索条件列表查询
阅读量:4507 次
发布时间:2019-06-08

本文共 4335 字,大约阅读时间需要 14 分钟。

public function indexQuestions(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');      //问题主题        $topic_id = $request->query('topic_id');      //话题id        if(!$topic_id){            return response()->json(['message' => ['话题id必须给出']], 422);        }        //话题关联问题id        $questions_id=QuestionTopic::where('topic_id',$topic_id)->pluck('question_id');        if(!$questions_id){            return response()->json([], 200);        }else{            $questions_id=$questions_id->toArray();        }        $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', 'all'), array_keys($map)) ? $type : 'all';        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.'%');            })            ->whereIn('id',$questions_id)            ->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);    }

 

转载于:https://www.cnblogs.com/sgm4231/p/10302181.html

你可能感兴趣的文章
12171131第一次作业
查看>>
argparse
查看>>
Pandas使用to_csv保存中文数据用Excel打开是乱码
查看>>
超大整数计算模拟算法
查看>>
<USACO07JAN>解决问题Problem Solvingの思路
查看>>
docker学习
查看>>
C#3.0入门系列(六)-之OrderBy操作
查看>>
10.25 AITalkUat部署
查看>>
枚举学习
查看>>
阅读《构建之法》第8,9,10章
查看>>
用户体验的重要性
查看>>
第八十一节,CSS3变形效果
查看>>
WordCount 分析
查看>>
项目需求分析答辩总结
查看>>
PostgreSQL 利用pg_upgrade升级版本
查看>>
Mybatis分页插件PageHelper简单使用
查看>>
同步互斥——理发师睡觉问题
查看>>
Python编写的ARP扫描工具
查看>>
github之克隆
查看>>
IOS SWIFT基本画图教程
查看>>