2013-07-18 7 views
71

Können sagen, wir Laravel des Query Builder verwenden:Wie alias eine Tabelle in Laravel Eloquent Abfragen (oder mit Query Builder)?

$users = DB::table('really_long_table_name') 
      ->select('really_long_table_name.id') 
      ->get(); 

Ich suche ein Äquivalent zu dieser SQL:

really_long_table_name AS short_name 

Dies wäre besonders hilfreich, wenn ich eine Menge wählt eintippen und wheres (oder normalerweise schließe ich den Alias ​​im Spaltenalias der Auswahl ein, und er wird im Ergebnisarray verwendet). Ohne Tabellen Aliase gibt es viel mehr Tipparbeit für mich und alles wird viel weniger lesbar. Kann die Antwort in den Laravel-Dokumenten nicht gefunden werden, irgendwelche Ideen?

Antwort

127

Laravel unterstützt Aliase auf Tabellen und Spalten mit AS. Versuchen

$users = DB::table('really_long_table_name AS t') 
      ->select('t.id AS uid') 
      ->get(); 

ist es mit einem ehrfürchtigen tinker Werkzeug in Aktion sehen Lassen

 
$ php artisan tinker 
[1] > Schema::create('really_long_table_name', function($table) {$table->increments('id');}); 
// NULL 
[2] > DB::table('really_long_table_name')->insert(['id' => null]); 
// true 
[3] > DB::table('really_long_table_name AS t')->select('t.id AS uid')->get(); 
// array(
// 0 => object(stdClass)(
//  'uid' => '1' 
// ) 
//) 
+40

Es wäre nützlich, das in die Dokumente zu legen. –

+1

@RubensMariuzzo Ich weiß. Ich glaube, Sie können einen Kommentar mit Anfrage in Laravel Foren hinterlassen http://forums.laravel.io – peterm

+0

Wie wäre es beredt? –

34

Um Aliase auf eloquent Modelle ändern Sie den Code wie folgt zu verwenden:

Item 
    ::from('items as items_alias') 
    ->join('attachments as att', DB::raw('att.item_id'), '=', DB::raw('items_alias.id')) 
    ->select(DB::raw('items_alias.*')) 
    ->get(); 

Dies wird automatisch Tabellenpräfix hinzufügen um Namen zu benennen und eine Instanz von Items Modell zurückgibt. kein einfaches Abfrageergebnis. Das Hinzufügen von DB::raw verhindert, dass Laravel Tabellenpräfixe zu Aliasen hinzufügt.

+3

Dies funktioniert nicht mit Soft-Löschen. – m3rg

+0

@ m3rg haben Sie jemals einen Weg gefunden, um mit Soft Delete arbeiten zu können? Abfrage schlägt fehl mit Fehler 'Unbekannte Spalte' table_alias.deleted_at'' – Yani

+0

Wie wäre es mit dieser Situation? SELECT * FROM fx_bank ALS RECHTER ÄUSSERER JOIN fx_ex_keys AS b auf b.bank_id = a.id UND a.agent_type = 2 WHERE b.status = 1 UND b.gruppe = -1; – GFxJamal

0

Gleiche wie AMIB Antwort, für weiche Löschfehler "Unknown column 'table_alias.deleted_at'", fügen Sie einfach -> withTrashed() es dann handhaben, sich wie "-> whereRaw ('items_alias.deleted_at IS NULL')"

1

Hier ist, wie man es tun kann. Ich werde ein Beispiel geben mit Beitritt, so dass es für jemanden super klar wird.

$products = DB::table('products AS pr') 
     ->leftJoin('product_families AS pf', 'pf.id', '=', 'pr.product_family_id') 
     ->select('pr.id as id', 'pf.name as family_name', 'pf.id as family') 
     ->orderBy('pr.id', 'desc') 
     ->get(); 

Hoffe das hilft.

Verwandte Themen