Startseite
NexoPOS

Umfangsklasse

Beim Erstellen von CRUD-Komponenten kann es vorkommen, dass Klassen auf derselben Tabelle basieren. Daher möchten Sie auf jede Komponente einen benutzerdefinierten Scope anwenden, um zu filtern, wie Einträge abgerufen werden.

Ein gutes Beispiel ist ein Blog mit PostCrud und MyPostCrud. Beide Klassen verwenden dieselbe Tabelle, aber MyPostCrud soll die Beiträge anzeigen, die vom angemeldeten Benutzer erstellt wurden. Genau dafür gibt es Scope-Klassen.

Geltungsbereich festlegen

In Ihrem Modul muss der Scope im Verzeichnis „Scopes“ gespeichert werden. Obwohl dies keine Pflicht ist, empfehlen wir dieses Vorgehen sehr. Die Definition eines Scopes folgt derselben Struktur wie ein regulärer Laravel-Scope. Hier ist ein Beispiel dafür, wie Scopes deklariert werden:


<?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() );
    }
}

Verwendung von Scopes auf Klassen

Nachdem wir unseren Umfang festgelegt haben, können wir ihn auf jede CRUD-Klasse anwenden, auf die wir ihn anwenden möchten. So gehen Sie vor:


<?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
}