소스 검색

added global scope for year

Alexander Musikhin 7 달 전
부모
커밋
f5dda125b9
4개의 변경된 파일30개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 0
      app/Helpers/roles.php
  2. 3 0
      app/Models/Product.php
  3. 18 0
      app/Models/Scopes/YearScope.php
  4. 1 1
      resources/views/layouts/app.blade.php

+ 8 - 0
app/Helpers/roles.php

@@ -30,3 +30,11 @@ if(!function_exists('roleName')) {
         return Role::NAMES[$role];
     }
 }
+
+// return current year
+if(!function_exists('year')) {
+    function year(): int
+    {
+        return (int)session('year', date('Y'));
+    }
+}

+ 3 - 0
app/Models/Product.php

@@ -3,12 +3,15 @@
 namespace App\Models;
 
 use App\Helpers\Price;
+use App\Models\Scopes\YearScope;
+use Illuminate\Database\Eloquent\Attributes\ScopedBy;
 use Illuminate\Database\Eloquent\Casts\Attribute;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\DB;
 
+#[ScopedBy([YearScope::class])]
 class Product extends Model
 {
     use SoftDeletes;

+ 18 - 0
app/Models/Scopes/YearScope.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Models\Scopes;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Scope;
+
+class YearScope implements Scope
+{
+    /**
+     * Apply the scope to a given Eloquent query builder.
+     */
+    public function apply(Builder $builder, Model $model): void
+    {
+        $builder->where('year', year());
+    }
+}

+ 1 - 1
resources/views/layouts/app.blade.php

@@ -71,7 +71,7 @@
                         @else
                             <li class="nav-item dropdown">
                                 <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                    {{ session('year', date('Y')) }}
+                                    {{ year() }}
                                 </a>
                                 <div class="dropdown-menu">
                                     @for($year = (int)date('Y') + 1; $year >= 2020; $year--)