1. public function indexQuestions(Request $request, ResponseFactoryContract $response, QuestionModel $questionModel)
  2. {
  3. $userID = $request->user('api')->id ?? 0;
  4. $limit = max(1, min(30, $request->query('limit', 15)));
  5. $offset = max(0, $request->query('offset', 0));
  6. $subject = $request->query('subject'); //问题主题
  7. $topic_id = $request->query('topic_id'); //话题id
  8. if(!$topic_id){
  9. return response()->json(['message' => ['话题id必须给出']], 422);
  10. }
  11. //话题关联问题id
  12. $questions_id=QuestionTopic::where('topic_id',$topic_id)->pluck('question_id');
  13. if(!$questions_id){
  14. return response()->json([], 200);
  15. }else{
  16. $questions_id=$questions_id->toArray();
  17. }
  18.  
  19. $map = [
  20. 'all' => function ($query) {
  21. $query->orderBy('id', 'desc');
  22. },
  23. 'new' => function ($query) {
  24. $query->where('answers_count', 0)
  25. ->orderBy('id', 'desc');
  26. },
  27. 'hot' => function ($query) use ($questionModel) {
  28. $query->whereBetween('created_at', [
  29. $questionModel->freshTimestamp()->subMonth(1),
  30. $questionModel->freshTimestamp(),
  31. ])->where('answers_count', '!=', 0);
  32. $query->orderBy('answers_count', 'desc');
  33. },
  34. 'reward' => function ($query) {
  35. $query->where('amount', '!=', 0)
  36. ->orderBy('id', 'desc');
  37. },
  38. 'excellent' => function ($query) {
  39. $query->where('excellent', '!=', 0)
  40. ->orderBy('id', 'desc');
  41. },
  42. 'follow' => function ($query) use ($userID) {
  43. $query->whereExists(function ($query) use ($userID) {
  44. $query->from('question_watcher')
  45. ->where('question_watcher.user_id', '=', $userID)
  46. ->whereRaw('question_watcher.question_id = questions.id');
  47. });
  48. },
  49. ];
  50. $type = in_array($type = $request->query('type', 'all'), array_keys($map)) ? $type : 'all';
  51. call_user_func($map[$type], $query = $questionModel
  52. ->whereDoesntHave('blacks', function ($query) use ($userID) {
  53. $query->where('user_id', $userID);
  54. })
  55. ->when($subject, function ($query) use ($subject) {
  56. return $query->where('subject', 'like', '%'.$subject.'%');
  57. })
  58. ->whereIn('id',$questions_id)
  59. ->limit($limit)
  60. ->offset($offset));
  61. $questions = $query->get();
  62. $questions->load('user');
  63.  
  64. return $response->json($questions->map(function (QuestionModel $question) use ($userID) {
  65. //作者匿名
  66. if ($question->anonymity && $question->user_id !== $userID) {
  67. $question->addHidden('user');
  68. $question->user_id = 0;
  69. }
  70.  
  71. $question->answer = $question->answers()
  72. ->whereDoesntHave('blacks', function ($query) use ($userID) {
  73. $query->where('user_id', $userID);
  74. })
  75. ->with('user')
  76. ->orderBy('id', 'desc')
  77. ->first();
  78.  
  79. if ($question->answer) {
  80.  
  81. if ($question->answer->anonymity && $question->answer->user_id !== $userID) {
  82. $question->answer->addHidden('user');
  83. $question->answer->user_id = 0;
  84. }
  85. $question->answer->liked = (bool) $question->answer->liked($userID);
  86. $question->answer->collected = (bool) $question->answer->collected($userID);
  87. $question->answer->rewarded = (bool) $question->answer->rewarders()->where('user_id', $userID)->first();
  88. $question->look && $question->answer->could = true;
  89.  
  90. if ($question->look && $question->answer->invited && (! $question->answer->onlookers()->where('user_id', $userID)->first()) && $question->answer->user_id !== $userID && $question->user_id !== $userID) {
  91. $question->answer->could = false;
  92. $question->answer->body = null;
  93. }
  94. }
  95.  
  96. return $question;
  97. }))->setStatusCode(200);
  98. }

laravel 多检索条件列表查询的更多相关文章

  1. 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理

    在我Boostrap框架中,很多地方需要使用bootstrapTable表格插件和jstree树形列表插件来共同构建一个比较常见的查询界面,bootstrapTable表格插件主要用来实现数据的分页和 ...

  2. 列表查询组件代码, 简化拼接条件SQL语句的麻烦

    列表查询组件代码, 简化拼接条件SQL语句的麻烦 多条件查询

  3. laravel多条件模糊查询

    1.运用cmd在项目根目录下创建路由组 php artisan make:controller queryController --resource 1.1数据库信息(student) CREATE ...

  4. Oracle 检索数据(查询数据、select语句)

    用户对表或视图最常进行的操作就是检索数据,检索数据可以通过 select 语句来实现,该语句由多个子句组成,通过这些子句完成筛选.投影和连接等各种数据操作,最终得到想要的结果. 语法: select ...

  5. asp.net mvc多条件+分页查询解决方案

    开发环境vs2010 css:bootstrap js:jquery bootstrap paginator 原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了 ...

  6. JSP+Servlet+javabean+oracle实现页面多条件模糊查询

    之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写or ...

  7. SHAREPOINT - CAML列表查询

    首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表.文档库的查询,字段的定义,站点定义等处处使用的都是CAML. 简单的提一 ...

  8. atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模

    )----列表查询建模 1. 配置条件字段@Conditional 1 2. 配置条件字段显示类型为range----@Conditional(displayType = displayType.ra ...

  9. 【Javascript】列表查询页面,简单地保存上一次查询的查询参数

    开发中经常做一些查询参数 + 列表参数的功能,这些功能有时候需提供导出Excel,或带超链接到其他明细页面的功能点. 在一些交互性要求严格的系统,需求方会要求: 用户第一个输入某些查询条件进行列表查询 ...

随机推荐

  1. 省市联动-获取资源文件xml 获取nodes的方法要学会

    try { SAXReader reader = new SAXReader(); InputStream input = this.getClass().getResourceAsStream(&q ...

  2. python,栈的小例子

    ''' 1.首先确认栈的概念,先进后出 2.初始化的时候如果给了一个数组那么就要将数组进栈 ''' class Stack: def __init__(self,start=[]): self.sta ...

  3. 椭圆曲线密码学ECC

      椭圆曲线密码学(Elliptic curve cryptography),简称ECC,是一种建立公开密钥加密的算法,也就是非对称加密.类似的还有RSA,ElGamal算法等.ECC被公认为在给定密 ...

  4. Pytorch tutorial 之Transfer Learning

    引自官方:  Transfer Learning tutorial Ng在Deeplearning.ai中讲过迁移学习适用于任务A.B有相同输入.任务B比任务A有更少的数据.A任务的低级特征有助于任务 ...

  5. 美团点评基于MGR的CMDB高可用架构搭建之路【转】

    王志朋 美团点评DBA 曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维. MySQL Group Replication(以下简称MGR),于5.7.17版 ...

  6. python骚操作之...

    python中的Ellipsis对象.写作:- 中文解释:省略 该对象bool测试是为真 用途: 1.用来省略代码,作用类似于pass的一种替代方案. from collections.abc imp ...

  7. python3+selenium入门01-环境搭建

    作为一个测试,在最近两年应该有明显的感觉.那就是工作变的难找,要求变的高了,自动化测试,性能测试等.没有自动化测试能力,只会点点点工作难找不说,工资也不高.所以还是要学习一些技术.首先要学习一门编程语 ...

  8. CF55D: Beautiful Number

    传送门 一句话题意 求 l~r 之间有多少个数能整除自己各位上的数(排除 0 ) 分析 然后我们一看就知道数位 dp ,但是状态很难设计啊 QWQ 我们可以发现所有数位的 lcm 最大为 2520 ( ...

  9. HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu

    首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...

  10. 制作ecc证书(linux命令行)

    生成ECC证书.Debian:/home/test# openssl ecparam -out EccCA.key -name prime256v1 -genkeyDebian:/home/test# ...