2013-07-18 25 views
71

phép nói rằng chúng ta đang sử dụng xây dựng truy vấn Laravel của:Làm cách nào để đặt bí danh một bảng trong truy vấn Eloquent Laravel (hoặc sử dụng Trình tạo truy vấn)?

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

Tôi đang tìm kiếm một tương đương với SQL này:

really_long_table_name AS short_name 

này sẽ đặc biệt hữu ích khi tôi phải gõ nhiều Selects và wheres (hoặc thường tôi bao gồm bí danh trong bí danh cột của lựa chọn là tốt, và nó được sử dụng trong mảng kết quả). Nếu không có bất kỳ bí danh bảng nào thì có rất nhiều cách gõ cho tôi và mọi thứ trở nên dễ đọc hơn rất nhiều. Không thể tìm thấy câu trả lời trong tài liệu laravel, bất kỳ ý tưởng nào?

Trả lời

127

Laravel hỗ trợ bí danh trên bảng và cột với AS. Hãy thử

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

Hãy xem nó trong hành động với một tinker công cụ tuyệt vời

 
$ 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

Sẽ hữu ích khi đặt tài liệu đó vào tài liệu. –

+1

@RubensMariuzzo Tôi biết. Tôi tin rằng bạn có thể để lại một bình luận với yêu cầu trong diễn đàn laravel http://forums.laravel.io – peterm

+0

làm thế nào về hùng hồn? –

34

Để sử dụng bí danh trên các mô hình hùng hồn sửa đổi mã của bạn như thế này:

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

này sẽ tự động thêm bảng tiền tố để đặt tên bảng và trả về một thể hiện của mô hình Items. không phải là kết quả truy vấn trần. Thêm DB::raw ngăn không cho Laravel thêm tiền tố bảng vào bí danh.

+3

Tính năng này không hoạt động với chức năng xóa mềm. – m3rg

+0

@ m3rg bạn đã bao giờ tìm thấy một cách để làm cho nó hoạt động với xóa mềm? truy vấn không thành công với lỗi 'cột không xác định 'table_alias.deleted_at'' – Yani

+0

về tình huống này như thế nào? CHỌN * TỪ fx_bank NHƯ MỘT NGƯỜI KIẾN TRÚC THAM GIA fx_ex_keys AS b trên b.bank_id = a.id AND a.agent_type = 2 WHERE b.status = 1 AND b.group = -1; – GFxJamal

0

Tương tự như câu trả lời AMIB, cho lỗi xóa mềm "Cột không xác định 'table_alias.deleted_at'", chỉ cần thêm -> withTrashed() rồi xử lý nó như "-> whereRaw ('items_alias.deleted_at IS NULL')"

1

Đây là cách người ta có thể làm điều đó. Tôi sẽ đưa ra một ví dụ với việc tham gia để nó trở nên siêu rõ ràng với ai đó.

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

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan