2012-11-04 11 views
40

Oto moje zapytanie za pomocą płynnego konstruktora zapytań.Jak wybrać licznik za pomocą kreatora zapytań 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(); 

Jak widać, zamawiam przez licznik z połączonego stołu. To działa dobrze. Jednak chcę, aby ta liczba została zwrócona z moimi wyborami.

Oto moje surowe zapytanie uzupełniające, które działa poprawnie.

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 

Jak bym go o to ustawić przy użyciu płynnego konstruktora zapytań laravel za? Jestem świadomy, że mogę użyć surowego zapytania SQL, ale chciałbym tego uniknąć, jeśli to możliwe. Każda pomoc będzie doceniona, z góry dzięki!

Odpowiedz

72

Możesz użyć tablicy w select(), aby zdefiniować więcej kolumn i możesz użyć DB :: raw() tam z aliasowaniem do obserwujących. Powinien wyglądać tak:

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

poda liczbę sztuk.

Aby uzyskać bardziej szczegółowe informacje, należy sprawdzić Fluent Query Builder w sekcji beautiful Laravel Documentation.

+0

ahh tak, zdawałem sobie z tego sprawę. Poza tym miałem nadzieję, że zrobię to w jednym zapytaniu podobnym do surowej kontynuacji, którą zamieściłem. Takie podejście wymagałoby ode mnie przechwycenia moich danych i policzenia ich dla każdego wiersza (liczba każdego wiersza może i będzie inna). Jakieś inne pomysły? Dzięki za pomoc! –

+0

Link już nie działa :( – Damon

+1

Dzięki @Damon Mam zaktualizowany link –

Powiązane problemy