Как выбрать счетчик с помощью конструктора запросов 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();

Как видите, я делаю заказ по количеству из объединенной таблицы. Это нормально работает. Однако я хочу, чтобы этот счетчик возвращался вместе с моим выбором.

Вот мой необработанный запрос продолжения, который отлично работает.

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

Как мне сделать этот выбор, используя свободный конструктор запросов Laravel? Я знаю, что могу использовать необработанный sql-запрос, но по возможности хотел бы этого избежать. Любая помощь будет оценена, заранее спасибо!


person Alex Naspo    schedule 04.11.2012    source источник


Ответы (2)


Вы можете использовать массив в select () для определения большего количества столбцов, и вы можете использовать DB :: raw () там с псевдонимом для последователей. Должно получиться так:

$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();
person TLGreg    schedule 30.11.2012

$count = DB::table('category_issue')->count();

даст вам количество предметов.

Для получения более подробной информации обратитесь к разделу Fluent Query Builder в красивой документации Laravel.

person Sinan Eldem    schedule 05.11.2012
comment
ааа да, я знал об этом. За исключением того, что я надеялся сделать это в одном запросе, похожем на опубликованное мною необработанное продолжение. Этот подход потребует от меня перебора моих данных и подсчета их для каждой строки (количество каждой строки может и будет отличаться). Есть другие идеи? Спасибо за помощь! - person Alex Naspo; 05.11.2012
comment
Как вы подсчитываете доступ? $count[0]->count? - person Dan; 01.08.2014
comment
@ Silver89 вот так: echo $ count. - person hkucuk; 03.05.2016