| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Requests\FilterRequest;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Schema;
- class FilterController extends Controller
- {
- const DB_TABLES = [
- 'orders' => 'orders_view',
- 'product_sku' => 'mafs_view',
- 'products' => 'products',
- 'reclamations' => 'reclamations_view',
- 'maf_order' => 'maf_orders_view',
- 'import' => 'imports',
- 'responsibles' => 'responsibles',
- 'users' => 'users',
- 'contracts' => 'contracts',
- ];
- public function getFilters(FilterRequest $request)
- {
- $table = $request->validated('table');
- $column = $request->validated('column');
- if(!array_key_exists($table, self::DB_TABLES)) {
- abort(400, 'Table not found');
- }
- $gp = session('gp_' . $table);
- $dbTable = self::DB_TABLES[$table];
- if (Schema::hasColumn($dbTable, $column)) {
- $q = DB::table($dbTable)->select($column)->distinct();
- if (Schema::hasColumn($dbTable, 'year')) {
- $q->where('year' , year());
- }
- if (Schema::hasColumn($dbTable, 'deleted_at')) {
- $q->whereNull('deleted_at');
- }
- if(isset($gp['filters']) && is_array($gp['filters']) && count($gp['filters'])) {
- foreach ($gp['filters'] as $colName => $vals) {
- $q->where(function ($query) use ($gp, $colName, $vals) {
- foreach (explode('||', $vals) as $val) {
- if($val == '-пусто-') $val = null;
- $query->orWhere($colName, '=', $val);
- }
- });
- }
- }
- // dd($q->toRawSql());
- $result = $q->orderBy($column)->get()->pluck($column)->toArray();
- } else {
- $result = [];
- }
- return response()->json($result, 200, [], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
- }
- }
|