HasGlobalScopes.php
TLDR
The file HasGlobalScopes.php
contains a trait HasGlobalScopes
with methods for managing and working with global scopes in an Eloquent model.
Methods
addGlobalScope($scope, $implementation = null)
This method is used to register a new global scope on the model. It accepts the following parameters:
-
$scope
: An instance of\Illuminate\Database\Eloquent\Scope
, aClosure
function, or a string representing the scope name. -
$implementation
: An optional instance of\Illuminate\Database\Eloquent\Scope
orClosure
function that implements the scope.
hasGlobalScope($scope)
This method is used to determine if a model has a global scope. It accepts the following parameter:
-
$scope
: An instance of\Illuminate\Database\Eloquent\Scope
or a string representing the scope name.
getGlobalScope($scope)
This method is used to get a global scope registered with the model. It accepts the following parameter:
-
$scope
: An instance of\Illuminate\Database\Eloquent\Scope
or a string representing the scope name.
getAllGlobalScopes()
This method is used to get all of the global scopes that are currently registered. It returns an array of global scopes.
setAllGlobalScopes($scopes)
This method is used to set the current global scopes for the model. It accepts the following parameter:
-
$scopes
: An array of global scopes to set.
getGlobalScopes()
This method is used to get the global scopes for this class instance. It returns an array of global scopes for the model instance.
Classes
N/A
<?php
namespace Illuminate\Database\Eloquent\Concerns;
use Closure;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Support\Arr;
use InvalidArgumentException;
trait HasGlobalScopes
{
/**
* Register a new global scope on the model.
*
* @param \Illuminate\Database\Eloquent\Scope|\Closure|string $scope
* @param \Illuminate\Database\Eloquent\Scope|\Closure|null $implementation
* @return mixed
*
* @throws \InvalidArgumentException
*/
public static function addGlobalScope($scope, $implementation = null)
{
if (is_string($scope) && ($implementation instanceof Closure || $implementation instanceof Scope)) {
return static::$globalScopes[static::class][$scope] = $implementation;
} elseif ($scope instanceof Closure) {
return static::$globalScopes[static::class][spl_object_hash($scope)] = $scope;
} elseif ($scope instanceof Scope) {
return static::$globalScopes[static::class][get_class($scope)] = $scope;
}
throw new InvalidArgumentException('Global scope must be an instance of Closure or Scope.');
}
/**
* Determine if a model has a global scope.
*
* @param \Illuminate\Database\Eloquent\Scope|string $scope
* @return bool
*/
public static function hasGlobalScope($scope)
{
return ! is_null(static::getGlobalScope($scope));
}
/**
* Get a global scope registered with the model.
*
* @param \Illuminate\Database\Eloquent\Scope|string $scope
* @return \Illuminate\Database\Eloquent\Scope|\Closure|null
*/
public static function getGlobalScope($scope)
{
if (is_string($scope)) {
return Arr::get(static::$globalScopes, static::class.'.'.$scope);
}
return Arr::get(
static::$globalScopes, static::class.'.'.get_class($scope)
);
}
/**
* Get all of the global scopes that are currently registered.
*
* @return array
*/
public static function getAllGlobalScopes()
{
return static::$globalScopes;
}
/**
* Set the current global scopes.
*
* @param array $scopes
* @return void
*/
public static function setAllGlobalScopes($scopes)
{
static::$globalScopes = $scopes;
}
/**
* Get the global scopes for this class instance.
*
* @return array
*/
public function getGlobalScopes()
{
return Arr::get(static::$globalScopes, static::class, []);
}
}