Início
NexoPOS

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
}