/ app / Http / Controllers / Filter / NormController.php
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  }