2012-11-04 39 views
40

Đây là truy vấn của tôi bằng trình tạo truy vấn thông thạo.Làm thế nào để chọn đếm với trình tạo truy vấn thông thạo của Laravel?

$query = DB::table('category_issue') 
     ->select('issues.*') 
     ->where('category_id', '=', 1) 
     ->join('issues', 'category_issue.issue_id', '=', 'issues.id') 
     ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id') 
     ->group_by('issues.id') 
     ->order_by(DB::raw('COUNT(issue_subscriptions.issue_id)'), 'desc') 
     ->get(); 

Như bạn có thể thấy, tôi sắp xếp theo số từ bảng đã tham gia. Điều này làm việc tốt. Tuy nhiên, tôi muốn số này được trả lại với các lựa chọn của tôi.

Đây là truy vấn phần tiếp theo nguyên của tôi hoạt động tốt.

Select issues.*, COUNT(issue_subscriptions.issue_id) AS followers 
FROM category_issue JOIN Issues ON category_issue.issue_id = issues.id 
LEFT JOIN issue_subscriptions ON issues.id = issue_subscriptions.issue_id 
WHERE category_issue.category_id = 1 
GROUP BY issues.id 
ORDER BY followers DESC 

Làm cách nào để chọn lựa chọn này bằng trình tạo truy vấn thông thạo của Laravel? Tôi biết tôi có thể sử dụng truy vấn sql thô nhưng tôi muốn tránh điều đó nếu có thể. Bất kỳ trợ giúp sẽ được đánh giá cao, cảm ơn trước!

Trả lời

72

Bạn có thể sử dụng một mảng trong select() để xác định thêm cột và bạn có thể sử dụng DB :: raw() ở đó với việc đặt bí danh cho người theo dõi. Nên có dạng như sau:

$query = DB::table('category_issue') 
    ->select(array('issues.*', DB::raw('COUNT(issue_subscriptions.issue_id) as followers'))) 
    ->where('category_id', '=', 1) 
    ->join('issues', 'category_issue.issue_id', '=', 'issues.id') 
    ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id') 
    ->group_by('issues.id') 
    ->order_by('followers', 'desc') 
    ->get(); 
23
$count = DB::table('category_issue')->count(); 

sẽ cung cấp cho bạn số lượng mục.

Đối với chi tiết kiểm tra thông tin thạo Query Builder phần trong beautiful Laravel Documentation.

+0

ahh có, tôi đã biết điều này. Ngoại trừ, tôi đã hy vọng sẽ làm điều đó trong một truy vấn đơn lẻ tương tự như phần tiếp theo nguyên bản mà tôi đã đăng. Cách tiếp cận này sẽ yêu cầu tôi lặp lại dữ liệu của tôi và đếm nó cho mỗi hàng (số lượng của mỗi hàng có thể và sẽ khác nhau). Bất kỳ ý tưởng nào khác? Cảm ơn đã giúp đỡ! –

+0

Liên kết không còn hoạt động: ( – Damon

+1

Cảm ơn @Damon Tôi đã cập nhật liên kết. –

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