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();
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.
Das obige ist der detaillierte Inhalt vonEloquenter Trick: Laravel-Modell aus Subquery. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!