Classe de Escopo
Ao construir componentes CRUD, você pode ter classes baseadas na mesma tabela. Portanto, você deseja aplicar um escopo personalizado a cada componente para filtrar como os registros são recuperados.
Um bom exemplo é um blog com PostCrud e MyPostCrud. Ambas as classes usam a mesma tabela, mas MyPostCrud deve exibir os posts criados pelo usuário autenticado. É aí que entram as Classes de Escopo.
Declarando Escopo
No seu módulo, o escopo deve ser armazenado no diretório “Scopes”. Embora isso não seja um requisito, recomendamos fortemente essa abordagem. A definição de um escopo segue a mesma estrutura de um escopo regular do Laravel. Aqui vai um exemplo de como os escopos são declarados:
<?php
namespace Modules\MyModule\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Database\Query\Builder;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Support\Facades\Auth;
class MyPost implements Scope
{
public function apply( Builder | QueryBuilder $builder, Model $model )
{
$builder->where( 'author', Auth::id() );
}
}
Usando Escopos em Classes
Agora que definimos nosso escopo, podemos aplicá-lo a qualquer classe CRUD que desejarmos. Veja como proceder:
<?php
namespace Modules\MyModule\Crud;
use App\Services\CrudService;
use App\Classes\CrudScope;
use Modules\MyModules\Scopes\MyPost;
#[ CrudScope( MyPost ) ]
class MyPostCrud extends CrudService
{
// internal class definition
}