22
33namespace  Spatie \ModelFlags \Models \Concerns ;
44
5+ use  BackedEnum ;
56use  Illuminate \Database \Eloquent \Builder ;
67use  Illuminate \Database \Eloquent \Model ;
78use  Illuminate \Database \Eloquent \Relations \MorphMany ;
@@ -18,48 +19,57 @@ public static function bootHasFlags()
1819        });
1920    }
2021
22+     protected  function  enumValue (string |BackedEnum $ valuestring 
23+     {
24+         if  (is_string ($ value
25+             return  $ value
26+         }
27+ 
28+         return  (string ) $ valuevalue ;
29+     }
30+ 
2131    public  function  flags (): MorphMany 
2232    {
2333        return  $ this morphMany (config ('model-flags.flag_model ' ), 'flaggable ' );
2434    }
2535
26-     public  function  hasFlag (string  $ namebool 
36+     public  function  hasFlag (string | BackedEnum $ namebool 
2737    {
2838        return  $ this 
2939            ->flags ()
30-             ->where ('name ' , $ name
40+             ->where ('name ' , $ this -> enumValue ( $ name) )
3141            ->exists ();
3242    }
3343
34-     public  function  flag (string  $ nameself 
44+     public  function  flag (string | BackedEnum $ nameself 
3545    {
36-         $ this flags ()->firstOrCreate (['name '  => $ nametouch ();
46+         $ this flags ()->firstOrCreate (['name '  => $ this -> enumValue ( $ name) ])->touch ();
3747
3848        return  $ this 
3949    }
4050
41-     public  function  unflag (string  $ nameself 
51+     public  function  unflag (string | BackedEnum $ nameself 
4252    {
43-         $ this flags ()->where ('name ' , $ namedelete ();
53+         $ this flags ()->where ('name ' , $ this -> enumValue ( $ name) )->delete ();
4454
4555        return  $ this 
4656    }
4757
48-     public  function  scopeFlagged (Builder $ querystring  $ namevoid 
58+     public  function  scopeFlagged (Builder $ querystring | BackedEnum $ namevoid 
4959    {
5060        $ query
5161            ->whereHas (
5262                'flags ' ,
53-                 fn  (Builder $ query$ querywhere ('name ' , $ name
63+                 fn  (Builder $ query$ querywhere ('name ' , $ this -> enumValue ( $ name) )
5464            );
5565    }
5666
57-     public  function  scopeNotFlagged (Builder $ querystring  $ namevoid 
67+     public  function  scopeNotFlagged (Builder $ querystring | BackedEnum $ namevoid 
5868    {
5969        $ query
6070            ->doesntHave (
6171                'flags ' ,
62-                 callback: fn  (Builder $ query$ querywhere ('name ' , $ name
72+                 callback: fn  (Builder $ query$ querywhere ('name ' , $ this -> enumValue ( $ name) )
6373            );
6474    }
6575
@@ -73,17 +83,17 @@ public function flagNames(): array
7383            ->toArray ();
7484    }
7585
76-     public  function  latestFlag (? string  $ namenull ): ?Flag 
86+     public  function  latestFlag (string | BackedEnum | null  $ namenull ): ?Flag 
7787    {
7888        return  $ this 
7989            ->flags ()
80-             ->when ($ namefn  (Builder $ query$ querywhere ('name ' , $ name
90+             ->when ($ namefn  (Builder $ query$ querywhere ('name ' , $ this -> enumValue ( $ name) ))
8191            ->orderByDesc ('updated_at ' )->orderByDesc ('id ' )
8292            ->first ();
8393    }
8494
85-     public  function  lastFlaggedAt (string  $ nameCarbon 
95+     public  function  lastFlaggedAt (string | BackedEnum $ nameCarbon 
8696    {
87-         return  $ this latestFlag ($ name
97+         return  $ this latestFlag ($ this -> enumValue ( $ name) )?->updated_at;
8898    }
8999}
0 commit comments