Tutorial · Laravel · 16.07.2024

Generika im Eloquent Builder von Laravel 11.15

Laravel 11.15 führt eine spannende Neuerung ein: Generika im Eloquent Builder. Diese Funktion verbessert die Typensicherheit und die Entwicklungsproduktivität e...

Einführung

Generika sind ein mächtiges Konzept in der Programmierung, das es ermöglicht, Typen als Parameter anzugeben. Dies erhöht die Flexibilität und Wiederverwendbarkeit von Methoden und Klassen. In Laravel 11.15 wurden Generika in den Eloquent Builder integriert, was die Arbeit mit Eloquent ORM weiter verbessert.

Vorteile von Generika im Eloquent Builder

Typensicherheit Generika sorgen dafür, dass der Compiler Typfehler frühzeitig erkennt. Dies reduziert Laufzeitfehler und macht den Code robuster. Verbesserte Code-Vervollständigung Mit Generika kann Ihre Entwicklungsumgebung genauere Vorschläge machen, was die Produktivität erhöht und die Fehlersuche erleichtert. Wiederverwendbarkeit Generische Methoden können mit verschiedenen Typen verwendet werden, ohne dass zusätzlicher Code geschrieben werden muss. Dies führt zu weniger Duplikation und einem saubereren Code.

Implementierung von Generika im Eloquent Builder

Grundlegende Implementierung Um Generika im Eloquent Builder zu verwenden, müssen Sie den Builder entsprechend anpassen. Hier ein einfaches Beispiel:

Anpassung des Modells

blade
namespace App\Models;

use Illuminate\Database\Eloquent\Builder as EloquentBuilder;

/**
 * @template TModel of \Illuminate\Database\Eloquent\Model
 * @extends EloquentBuilder<TModel>
 */
class Builder extends EloquentBuilder
{
    // Ihre benutzerdefinierten Methoden hier
}
blade
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Erstellen eines neuen Eloquent Builders für das Modell.
     *
     * @param \Illuminate\Database\Query\Builder $query
     * @return \App\Models\Builder
     */
    public function newEloquentBuilder($query)
    {
        return new Builder($query);
    }
}

Anwendung von Generika im Eloquent Builder

Beispiel: Benutzerdefinierte Methoden Erstellen Sie benutzerdefinierte Methoden im Builder, um spezielle Abfragen zu erleichtern:
blade
namespace App\Models;

/**
 * @template TModel of \Illuminate\Database\Eloquent\Model
 * @extends \Illuminate\Database\Eloquent\Builder<TModel>
 */
class Builder extends \Illuminate\Database\Eloquent\Builder
{
    /**
     * Filtere aktive Benutzer.
     *
     * @return \App\Models\Builder<\App\Models\User>
     */
    public function active()
    {
        return $this->where('status', 'active');
    }
}
Verwendung der benutzerdefinierten Methode Nutzen Sie die neue Methode in Ihrem Code:
php
use App\Models\User;

$activeUsers = User::query()->active()->get();

Erweitern der Funktionalität

Sie können die generische Typdeklaration nutzen, um sicherzustellen, dass die Rückgabe immer vom richtigen Typ ist:
blade
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
 * @template TModel of Model
 * @extends \Illuminate\Database\Eloquent\Builder<TModel>
 */
class Builder extends \Illuminate\Database\Eloquent\Builder
{
    /**
     * @return \App\Models\Builder<User>
     */
    public function active()
    {
        return $this->where('status', 'active');
    }
}

Tipps zur optimalen Nutzung

IDE-Unterstützung Stellen Sie sicher, dass Ihre IDE oder Ihr Editor Generika unterstützt, um die Vorteile der verbesserten Code-Vervollständigung und Typensicherheit voll auszuschöpfen. Konsistente Typdeklaration Verwenden Sie konsistente Typdeklarationen in Ihrem gesamten Code, um die Lesbarkeit und Wartbarkeit zu erhöhen. Nutzen Sie PHPStan oder Psalm Tools wie PHPStan oder Psalm können Ihnen helfen, den Code auf Typfehler und andere potenzielle Probleme zu überprüfen.
Die Einführung von Generika im Eloquent Builder von Laravel 11.15 ist ein großer Schritt nach vorne für die Typensicherheit und Wiederverwendbarkeit von Code. Durch die Implementierung und Nutzung von Generika können Sie robusteren und besser wartbaren Code schreiben. Nutzen Sie die Tipps und Beispiele in diesem Tutorial, um das Beste aus dieser neuen Funktion herauszuholen.
Viel Erfolg bei der Implementierung und viel Spaß beim Coden!
Quelle: https://birdapi.de/blog/tutorials-laravel/generika-im-eloquent-builder-von-laravel-1115