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);
}

laravel 分类的列表查询的更多相关文章

  1. Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by

    案例 案例:Laravel 在文章列表中附带上前10条评论?,在获取文章列表时同时把每个文章的前10条评论一同查询出来. 这是典型分区查询案例,需要根据 comments 表中的 post_id 字段 ...

  2. SHAREPOINT - CAML列表查询

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

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

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

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

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

  5. Moss列表查询,删除条目,更新条目。

    基于Query语句的列表查询 function retrieveListItems(itemId) {    var siteUrl=_spPageContextInfo.webServerRelat ...

  6. 【SSH系列】一步步深入springmvc+商品列表查询demo

    在前面的博文中,小编主要简单的介绍springmvc的体系结构.mvc模式的优缺点以及mvc框架,今天我们来继续学习springmvc的相关知识,在这篇博文中,小编讲解过springmvc的体系结构, ...

  7. SharePoint中跨列表查询

    1,最近的项目中遇到一个需求,站点中有几十个列表,其中每5,6个列表属于一个模块下的.客户的需求是,首页上显示一个模块下所有列表数据的前5条,并按创建时间排序. 2,刚刚考虑到这块的实现方法时,用的是 ...

  8. 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...

  9. Office365学习笔记—列表查询,删除条目,更新条目。

    1,基于Query语句的列表查询. function retrieveListItems(itemId) { var siteUrl=_spPageContextInfo.webServerRelat ...

随机推荐

  1. python基础类知识~pymysql封装类

    一简介:咱们来介绍下 DBA常用的几个类 二 具体代码 #!/usr/bin/python3import pymysqlimport sysclass DBHelper: def __init__(s ...

  2. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  3. 框架中的导航框架 & position定位

    框架中,通过链接将一个页面显示在另一个框架中:   总框架: <frameset cols="15%,*">   <frame src="xx.html ...

  4. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  5. git-bisect last updated in 2.19.1【转】

    转自:https://git-scm.com/docs/git-bisect NAME git-bisect - Use binary search to find the commit that i ...

  6. Liunx之KVM搭建图形化的WEB

    作者:邓聪聪 我们常在Windowns下使用VMware,当然在Liunx中也有这样的软件供我们使用.生产环境的KVM宿主机越来越多,需要对宿主机的状态进行调控.这里用webvirtmgr进行管理.图 ...

  7. 【Boost】boost::tokenizer详解

    分类: [C++]--[Boost]2012-12-28 21:42 2343人阅读 评论(0) 收藏 举报   目录(?)[+]   tokenizer 库提供预定义好的四个分词对象, 其中char ...

  8. struts2框架学习之第一天

    day01 Struts2概述 1 什么是框架 试想一下,人与人之间不同之处多,还是相同之处多呢?当然是相同之处多,不同之处少!人都有头,而且头都在脖子上面! 软件之间也是相同之处多,不同之处少,框架 ...

  9. 007_ip统计及攻击ip分析

    线上经常有被扫描的DDoS攻击事件,需要集合日志进行分析,这里有两种方法,分别是通过shell和python的方式. 一.shell '''<1>shell一句命令分析 http://bl ...

  10. ubuntu 安装 wireshark

    1.添加 wireshark 源 sudo apt-add-repository ppa:wireshark-dev/stable 2.更新    sudo apt-get update 3.安装 w ...