FilterController.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\FilterRequest;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Schema;
  6. class FilterController extends Controller
  7. {
  8. const DB_TABLES = [
  9. 'orders' => 'orders_view',
  10. 'product_sku' => 'mafs_view',
  11. 'products' => 'products',
  12. 'reclamations' => 'reclamations_view',
  13. 'maf_order' => 'maf_orders_view',
  14. 'import' => 'imports',
  15. 'responsibles' => 'responsibles',
  16. 'users' => 'users',
  17. 'contracts' => 'contracts',
  18. 'spare_parts' => 'spare_parts',
  19. 'spare_part_orders' => 'spare_part_orders_view',
  20. ];
  21. public function getFilters(FilterRequest $request)
  22. {
  23. $table = $request->validated('table');
  24. $column = $request->validated('column');
  25. if(!array_key_exists($table, self::DB_TABLES)) {
  26. abort(400, 'Table not found');
  27. }
  28. $gp = session('gp_' . $table);
  29. $dbTable = self::DB_TABLES[$table];
  30. if (Schema::hasColumn($dbTable, $column)) {
  31. $q = DB::table($dbTable)->select($column)->distinct();
  32. if (Schema::hasColumn($dbTable, 'year')) {
  33. $q->where('year' , year());
  34. }
  35. if (Schema::hasColumn($dbTable, 'deleted_at')) {
  36. $q->whereNull('deleted_at');
  37. }
  38. if(isset($gp['filters']) && is_array($gp['filters']) && count($gp['filters'])) {
  39. foreach ($gp['filters'] as $colName => $vals) {
  40. $q->where(function ($query) use ($gp, $colName, $vals) {
  41. foreach (explode('||', $vals) as $val) {
  42. if($val == '-пусто-') $val = null;
  43. $query->orWhere($colName, '=', $val);
  44. }
  45. });
  46. }
  47. }
  48. // dd($q->toRawSql());
  49. $result = $q->orderBy($column)->get()->pluck($column)->toArray();
  50. } else {
  51. $result = [];
  52. }
  53. return response()->json($result, 200, [], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
  54. }
  55. }