2013-07-18 15 views
71

Powiedzmy używamy laravel za Query Builder:Jak alias tabeli w kwerendach Laravel Eloquent (lub przy użyciu Konstruktora kwerend)?

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

szukam odpowiednik tego SQL:

really_long_table_name AS short_name 

Byłoby to szczególnie przydatne, kiedy trzeba wpisywać wiele wybiera i wheres (lub zazwyczaj włączam alias do aliasu kolumnowego selekcji i jest on używany w tablicy wyników). Bez żadnych aliasów tabeli jest dla mnie dużo więcej pisania i wszystko staje się dużo mniej czytelne. Nie możesz znaleźć odpowiedzi w dokumentacji do laravel, żadnych pomysłów?

Odpowiedz

127

Laravel obsługuje aliasy na tabelach i kolumnach z AS. Spróbuj

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

Zobaczymy go w akcji z niesamowitym tinker narzędzia

 
$ 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

Przydałoby się to umieścić w dokumentach. –

+1

@RubensMariuzzo Wiem. Wierzę, że możesz zostawić komentarz z prośbą na forach laravel http://forums.laravel.io – peterm

+0

co powiesz na elokwentny? –

34

Aby użyć aliasów na modelach wymownych zmodyfikować kod tak:

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(); 

Spowoduje to automatyczne dodanie prefiksów tabel do nazw tabel i zwraca instancję modelu Items. nie jest to zwykły wynik zapytania. Dodanie DB::raw zapobiega dodawaniu przedrostków tabel do aliasów.

+3

To nie działa z miękkim usuwaniem. – m3rg

+0

@ m3rg czy kiedykolwiek znalazłeś sposób, aby działał z miękkim usuwaniem? zapytanie kończy się niepowodzeniem z błędem "Nieznana kolumna" table_alias.deleted_at'' – Yani

+0

co z tą sytuacją? SELECT * FROM fx_bank JAK DOŁĄCZ DO ZEWNĄTRZ fx_ex_keys AS b on b.bank_id = a.id AND a.agent_type = 2 WHERE b.status = 1 AND b.group = -1; – GFxJamal

0

samo jak AMIB odpowiedzi na miękkim błędu kasowania "Nieznana kolumna 'table_alias.deleted_at'", po prostu dodaj -> withTrashed() wówczas poradzić się jak "-> whereRaw ('items_alias.deleted_at IS NULL')"

1

Oto jak można to zrobić. Podam przykład z dołączeniem, aby stał się dla kogoś bardzo przejrzysty.

$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(); 

Mam nadzieję, że to pomoże.

Powiązane problemy