FilterController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. ];
  19. public function getFilters(FilterRequest $request)
  20. {
  21. $table = $request->validated('table');
  22. $column = $request->validated('column');
  23. if(!array_key_exists($table, self::DB_TABLES)) {
  24. abort(400, 'Table not found');
  25. }
  26. $gp = session('gp_' . $table);
  27. $dbTable = self::DB_TABLES[$table];
  28. if (Schema::hasColumn($dbTable, $column)) {
  29. $q = DB::table($dbTable)->select($column)->distinct();
  30. if (Schema::hasColumn($dbTable, 'year')) {
  31. $q->where('year' , year());
  32. }
  33. if (Schema::hasColumn($dbTable, 'deleted_at')) {
  34. $q->whereNull('deleted_at');
  35. }
  36. if(isset($gp['filters']) && is_array($gp['filters']) && count($gp['filters'])) {
  37. foreach ($gp['filters'] as $colName => $vals) {
  38. $q->where(function ($query) use ($gp, $colName, $vals) {
  39. foreach (explode('||', $vals) as $val) {
  40. if($val == '-пусто-') $val = null;
  41. $query->orWhere($colName, '=', $val);
  42. }
  43. });
  44. }
  45. }
  46. // dd($q->toRawSql());
  47. $result = $q->orderBy($column)->get()->pluck($column)->toArray();
  48. } else {
  49. $result = [];
  50. }
  51. return response()->json($result, 200, [], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
  52. }
  53. }