2013-07-18 56 views
71

比方說,我們正在使用Laravel的查詢生成器:如何在Laravel Eloquent查詢(或使用查詢生成器)中對錶進行別名?

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

我在尋找一個相當於這個SQL:

really_long_table_name AS short_name 

時,我必須鍵入很多選擇的這將是特別有幫助(或者通常我在select的列別名中包含別名,並且它在結果數組中使用)。如果沒有任何表格別名,我會輸入更多的信息,所有信息都會變得不可讀。在laravel文檔中找不到答案,有什麼想法?

回答

127

Laravel支持使用AS的表和列的別名。嘗試

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

讓我們來看看它的實際運行與真棒tinker工具

 
$ 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

將它放在文檔中會很有用。 –

+1

@RubensMariuzzo我知道。我相信你可以在laravel論壇中發表評論請求http://forums.laravel.io – peterm

+0

如何能言善辯? –

34

要使用上口若懸河車型別名修改這樣的代碼:

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

這將自動添加表前綴到表名並返回Items模型的實例。不是一個簡單的查詢結果。 添加DB::raw可防止laravel將表前綴添加到別名。

+3

這不適用於軟刪除。 – m3rg

+0

@ m3rg您是否曾經找到過使用軟刪除工作的方法?查詢失敗,錯誤爲'未知列'table_alias.deleted_at'' – Yani

+0

這種情況如何? SELECT * FROM fx_bank AS RIGHT OUTER JOIN 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

與AMIB相同,對於軟刪除錯誤「未知列'table_alias.deleted_at'」,只需添加 - > withTrashed()然後自己處理它,就像「 - > whereRaw('items_alias.deleted_at IS NULL')」

1

以下是人們如何做到的。我將舉一個加入的例子,以便對某人變得非常清楚。

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

希望這會有所幫助。

相關問題