SearchPaliWbwController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. ->orderBy('co','desc');
  75. $result = $table->get();
  76. return $this->ok(["rows"=>SearchBookResource::collection($result),"count"=>count($result)]);
  77. }
  78. /**
  79. * Store a newly created resource in storage.
  80. *
  81. * @param \Illuminate\Http\Request $request
  82. * @return \Illuminate\Http\Response
  83. */
  84. public function store(Request $request)
  85. {
  86. return $this->index($request);
  87. }
  88. /**
  89. * Display the specified resource.
  90. *
  91. * @param \App\Models\WbwTemplate $wbwTemplate
  92. * @return \Illuminate\Http\Response
  93. */
  94. public function show(WbwTemplate $wbwTemplate)
  95. {
  96. //
  97. }
  98. /**
  99. * Update the specified resource in storage.
  100. *
  101. * @param \Illuminate\Http\Request $request
  102. * @param \App\Models\WbwTemplate $wbwTemplate
  103. * @return \Illuminate\Http\Response
  104. */
  105. public function update(Request $request, WbwTemplate $wbwTemplate)
  106. {
  107. //
  108. }
  109. /**
  110. * Remove the specified resource from storage.
  111. *
  112. * @param \App\Models\WbwTemplate $wbwTemplate
  113. * @return \Illuminate\Http\Response
  114. */
  115. public function destroy(WbwTemplate $wbwTemplate)
  116. {
  117. //
  118. }
  119. }