„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Eloquenter Trick: Laravel-Modell aus Subquery

Eloquenter Trick: Laravel-Modell aus Subquery

Veröffentlicht am 03.11.2024
Durchsuche:884

Eloquent Trick: Laravel Model from Subquery

In Laravel ist es üblich, die entsprechende Tabelle eines Modells mithilfe der Tabelleneigenschaft zu definieren, wie zum Beispiel:

class User extends Model {
  protected $table = 'users';
}

Anstatt jedoch direkt einer Tabelle zuzuordnen, können wir eine Unterabfrage verwenden. Mit dieser Technik können wir komplexe Abfragen innerhalb der Anwendungsschicht kapseln, ähnlich wie beim Erstellen einer Datenbankansicht, jedoch mit der zusätzlichen Flexibilität von Eloquent-Operationen.

Stellen Sie sich beispielsweise eine Benutzertabelle vor, in der Informationen sowohl zu Administratoren als auch zu regulären Benutzern gespeichert sind. Wir können ein AdminUser-Modell mithilfe einer Unterabfrage erstellen:

class AdminUser
{
    public function getTable(): string|\Illuminate\Contracts\Database\Query\Expression
    {
        $sql = User::query()
            ->select('id', 'name')
            ->where('admin_user', true)
            ->toRawSql();

        return DB::raw(sprintf('(%s) as admin_users', $sql));
    } 
}

Dieses Modell ruft Daten aus einer Unterabfrage ab (wählen Sie ID und Namen von Benutzern aus, wobei admin_user = 1), sodass Sie sie wie ein Standardmodell abfragen können:

AdminUser::query()->get();

oder

AdminUser::query()->first();

Beachten Sie jedoch, dass bestimmte Abfragen wie find(1) nicht direkt funktionieren:

AdminUser::query()->find(1);

Um dies zu umgehen, können Sie eine Where-Bedingung in Kombination mit first() verwenden:

AdminUser::query()->where('id', 1)->first();

Abschluss

Das bereitgestellte Beispiel ist eine einfache Veranschaulichung, wie wir Logik innerhalb eines Modells strukturieren können. Dieser Ansatz kann jedoch skaliert und angepasst werden, um viel komplexere Szenarien abzudecken. Durch die Nutzung solcher Strukturen können wir komplizierte Logik effizient verwalten und extrahieren und so sicherstellen, dass unsere Modelle auch bei zunehmender Komplexität organisiert, wartbar und skalierbar bleiben.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3