SearchPaliWbwController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\DB;
  5. use App\Models\WbwTemplate;
  6. use App\Http\Resources\SearchPaliWbwResource;
  7. use App\Http\Resources\SearchBookResource;
  8. class SearchPaliWbwController extends Controller
  9. {
  10. /**
  11. * Display a listing of the resource.
  12. *
  13. * @return \Illuminate\Http\Response
  14. */
  15. public function index(Request $request)
  16. {
  17. //获取书的范围
  18. $bookId = [];
  19. $search = new SearchController;
  20. if($request->has('book')){
  21. foreach (explode(',',$request->get('book')) as $key => $id) {
  22. $bookId[] = (int)$id;
  23. }
  24. }else if($request->has('tags')){
  25. //查询搜索范围
  26. //查询搜索范围
  27. $tagItems = explode(';',$request->get('tags'));
  28. foreach ($tagItems as $tagItem) {
  29. $bookId = array_merge($bookId,$search->getBookIdByTags(explode(',',$tagItem)));
  30. }
  31. }
  32. $keyWords = explode(',',$request->get('key'));
  33. $table = WbwTemplate::whereIn('real',$keyWords)
  34. ->groupBy(['book','paragraph'])
  35. ->selectRaw('book,paragraph,sum(weight) as rank');
  36. $placeholderWord = implode(",",array_fill(0, count($keyWords), '?')) ;
  37. $whereWord = "real in ({$placeholderWord})";
  38. $whereBookId = '';
  39. if(count($bookId)>0){
  40. $table = $table->whereIn('pcd_book_id',$bookId);
  41. $placeholderBookId = implode(",",array_fill(0, count($bookId), '?')) ;
  42. $whereBookId = " and pcd_book_id in ({$placeholderBookId}) ";
  43. }
  44. $queryCount = "SELECT count(*) FROM ( SELECT book,paragraph FROM wbw_templates WHERE $whereWord $whereBookId GROUP BY book,paragraph) T;";
  45. $count = DB::select($queryCount,array_merge($keyWords,$bookId));
  46. $table = $table->orderBy('rank','desc');
  47. $table = $table->skip($request->get("offset",0))
  48. ->take($request->get('limit',10));
  49. $result = $table->get();
  50. return $this->ok([
  51. "rows"=>SearchPaliWbwResource::collection($result),
  52. "count"=>$count[0]->count,
  53. ]);
  54. }
  55. public function book_list(Request $request){
  56. //获取书的范围
  57. $bookId = [];
  58. $search = new SearchController;
  59. if($request->has('tags')){
  60. //查询搜索范围
  61. //查询搜索范围
  62. $tagItems = explode(';',$request->get('tags'));
  63. foreach ($tagItems as $tagItem) {
  64. $bookId = array_merge($bookId,$search->getBookIdByTags(explode(',',$tagItem)));
  65. }
  66. }
  67. $keyWords = explode(',',$request->get('key'));
  68. $table = WbwTemplate::whereIn('real',$keyWords);
  69. if(count($bookId)>0){
  70. $table = $table->whereIn('pcd_book_id',$bookId);
  71. }
  72. $table = $table->groupBy('pcd_book_id')
  73. ->selectRaw('pcd_book_id,count(*) as co');
  74. $result = $table->get();
  75. return $this->ok(["rows"=>SearchBookResource::collection($result),"count"=>count($result)]);
  76. }
  77. /**
  78. * Store a newly created resource in storage.
  79. *
  80. * @param \Illuminate\Http\Request $request
  81. * @return \Illuminate\Http\Response
  82. */
  83. public function store(Request $request)
  84. {
  85. return $this->index($request);
  86. }
  87. /**
  88. * Display the specified resource.
  89. *
  90. * @param \App\Models\WbwTemplate $wbwTemplate
  91. * @return \Illuminate\Http\Response
  92. */
  93. public function show(WbwTemplate $wbwTemplate)
  94. {
  95. //
  96. }
  97. /**
  98. * Update the specified resource in storage.
  99. *
  100. * @param \Illuminate\Http\Request $request
  101. * @param \App\Models\WbwTemplate $wbwTemplate
  102. * @return \Illuminate\Http\Response
  103. */
  104. public function update(Request $request, WbwTemplate $wbwTemplate)
  105. {
  106. //
  107. }
  108. /**
  109. * Remove the specified resource from storage.
  110. *
  111. * @param \App\Models\WbwTemplate $wbwTemplate
  112. * @return \Illuminate\Http\Response
  113. */
  114. public function destroy(WbwTemplate $wbwTemplate)
  115. {
  116. //
  117. }
  118. }