NormController.php
1 <?php 2 3 namespace App\Http\Controllers\Filter; 4 5 use App\Http\Controllers\Controller; 6 use App\Models\Norm; 7 use App\Models\NormGroup; 8 use App\Models\NormScope; 9 use Illuminate\Contracts\Database\Eloquent\Builder; 10 use Illuminate\Http\Request; 11 12 class NormController extends Controller 13 { 14 public function groups(Request $request) 15 { 16 return NormGroup::query() 17 ->select('id', 'name') 18 ->orderBy('name') 19 ->when( 20 $request->search, 21 fn (Builder $query) => $query 22 ->where('name', 'like', "%{$request->search}%") 23 ) 24 ->when( 25 $request->exists('selected'), 26 fn (Builder $query) => $query->whereIn('id', $request->input('selected', [])), 27 fn (Builder $query) => $query->limit(10) 28 ) 29 ->get(); 30 } 31 32 public function norms(Request $request) 33 { 34 return Norm::query() 35 ->select('id', 'version') 36 ->where('norm_group_id', '=', $request->group) 37 ->orderBy('version') 38 ->when( 39 $request->search, 40 fn (Builder $query) => $query 41 ->where('version', 'like', "%{$request->search}%") 42 ) 43 ->when( 44 $request->exists('selected'), 45 fn (Builder $query) => $query->whereIn('id', $request->input('selected', [])), 46 fn (Builder $query) => $query->limit(10) 47 ) 48 ->get(); 49 } 50 51 public function scopes(Request $request) 52 { 53 return NormScope::query() 54 ->select('id', 'name') 55 ->where('norm_id', '=', $request->norm) 56 ->orderBy('name') 57 ->when( 58 $request->search, 59 fn (Builder $query) => $query 60 ->where('name', 'like', "%{$request->search}%") 61 ) 62 ->when( 63 $request->exists('selected'), 64 fn (Builder $query) => $query->whereIn('id', $request->input('selected', [])), 65 fn (Builder $query) => $query->limit(10) 66 ) 67 ->get(); 68 } 69 70 public function allNorms(Request $request) 71 { 72 return Norm::query() 73 ->when($request->search, function ($query) use ($request) { 74 $query->whereHas('normGroup', function ($subQuery) use ($request) { 75 $subQuery->whereRaw("CONCAT(norm_groups.name, ' ', norms.version) LIKE ?", ["%{$request->search}%"]); 76 }); 77 }) 78 ->when( 79 $request->exists('selected'), 80 fn (Builder $query) => $query->whereIn('id', $request->input('selected', [])), 81 fn (Builder $query) => $query->limit(10) 82 ) 83 ->without(['workbooks', 'norm_scopes']) 84 ->get() 85 ->map(function ($norm) { 86 return [ 87 'id' => $norm->id, 88 'name' => $norm->name, 89 ]; 90 }); 91 } 92 }