2014-11-16 31 views
15

Tôi có một mô hình hùng hồn tên là hùng biện:Làm thế nào để bí danh tên của một cột trong hùng biện

Products::where("actice", "=", true)->get()->toArray(); 

Bây giờ tôi muốn thêm gia-tuyên bố nó, tôi đã xác định một scopeQuery với:

public function scopeJoinWithTags($query) 
    { 
     return $query->leftJoin("tags", "tags.id", "=", "products.tag_id"); 
    } 

Sau đó truy vấn chính của chúng tôi thay đổi để:

Products::where("actice", "=", true)->joinWithTags->get()->toArray(); 

những gì tôi nhận được là OK, đó là những gì tôi mong đợi, nhưng tôi muốn thay đổi tên thuộc tính của các thẻ bảng với tag_name, tôi nên làm như thế nào? Ý tôi là, tôi nói ở đâu đó trong truy vấn của tôi để:

tags.name AS tag_name 

Vì vậy mà trong mảng kết quả cuối cùng tôi làm:

$result[$i]['tag_name']; 

Trong khi bây giờ tôi phải:

$result[$i]['name']; 
+0

có thể lặp lại [http://stackoverflow.com/questions/ 17174837/laravel-4-eloquent-column-alias] (http://stackoverflow.com/questions/17174837/laravel-4-eloquent-column-alias) – itachi

Trả lời

24

Cách đơn giản nhất để thực hiện việc này, hãy thêm các trường bạn cần vào phương thức get() và đặt tên cho các trường bạn muốn đổi tên ở đó.

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->get(['tags.name AS tag_name', 'products.*']) 
    ->toArray(); 
+0

Bạn có thể cho tôi biết param thứ hai là gì? '' actice. * ''? Tôi đã thay đổi nó thành 'sản phẩm. *' Và nó hoạt động. –

+2

Rất tiếc, phải có sản phẩm. * Nó chỉ đơn giản có nghĩa là bao gồm tất cả các trường của bảng sản phẩm của bạn. – turntwo

+0

Đây là phương pháp tôi đã sử dụng, nhưng cần lưu ý rằng các khung công tác khác xử lý điều này một cách nguyên bản với các mảng kết hợp. Đó là một điều đáng tiếc này là trái của Laravel. – dKen

0

On Laravel 5.4 (Tôi không biết nếu phiên bản trước đó cũng được áp dụng), bạn có thể làm điều đó với select phương pháp:

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->select('tags.name AS tag_name', 'products.*') 
    ->get(); 

Ít nhất đối với tôi đây là sạch hơn.

+0

cách đổi tên bảng sản phẩm? –

0

Ngoài ra còn có một cách sạch hơn để đạt được điều này

Bạn có thể tận dụng lợi thế của mutators laravel

public function getTagNameAttribute() 
{ 
    return $this->attributes['name']; 
} 

Hope this helps

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