Nehmen wir an, wir verwenden den Abfrage-Generator von Laravel:
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
Ich suche nach einem Äquivalent zu diesem SQL:
really_long_table_name AS short_name
Dies ist besonders hilfreich, wenn ich viele Auswahlen und Orte eingeben muss (oder normalerweise füge ich den Alias auch in den Spaltenalias der Auswahl ein und er wird im Ergebnisarray verwendet). Ohne Tabellen-Aliase gibt es für mich viel mehr Tippen und alles wird viel weniger lesbar. Können Sie die Antwort in den Laravel-Dokumenten nicht finden, irgendwelche Ideen?
protected $table = "books";
). Wie kann ich dann Aliase erstellen? (zB generierten SQL:... FROM books AS A ...
)protected $table = 'really_long_table_name AS short_name';
aber das würde bei INSERTs allerdings fehlschlagen. Kann auch Beziehungsabfragen unterbrechen. Ich verwende Lumen und ein DDD / Repository-Muster, um Eloquent vollständig zu vermeiden.Um Aliase für beredte Modelle zu verwenden, ändern Sie Ihren Code wie folgt:
Dadurch wird den Tabellennamen automatisch ein Tabellenpräfix hinzugefügt und eine
Items
Modellinstanz zurückgegeben. kein bloßes Abfrageergebnis. DurchDB::raw
das Hinzufügen wird verhindert, dass Laravel Aliase mit Tabellenpräfixen versehen.quelle
Unknown column 'table_alias.deleted_at'
->withTrashed()
und->whereNull('table_alias.deleted_at')
Hier ist, wie man es machen kann. Ich werde ein Beispiel mit Beitritt geben, damit es jemandem super klar wird.
Hoffe das hilft.
quelle
In Eloquent verwenden. Fügen Sie oben auf Ihrem Modell hinzu
protected $table = 'table_name as alias'
..dann in Ihrer Abfrage wie verwenden
ModelName::query()->select(alias.id, alias.name)
quelle
Sie können weniger Code verwenden, indem Sie Folgendes schreiben:
Und wenn Sie mehr Felder auswählen möchten, schreiben Sie einfach ein "," und fügen Sie weitere hinzu:
Dies ist sehr praktisch, wenn Sie eine komplexe Abfrage für Verknüpfungen verwenden
quelle
Wie bei der AMIB-Antwort, für den Soft-Delete-Fehler "Unbekannte Spalte 'table_alias.deleted_at'" einfach hinzufügen und
->withTrashed()
dann selbst behandeln->whereRaw('items_alias.deleted_at IS NULL')
quelle