web-dev-qa-db-fra.com

Comment sélectionner le compte avec le constructeur de requêtes fluide de Laravel?

Voici ma requête en utilisant couramment le constructeur de requêtes.

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

Comme vous pouvez le constater, je commande par un nombre de la table jointe. Cela fonctionne bien. Cependant, je veux que ce nombre soit renvoyé avec mes sélections.

Voici la requête de ma suite brute qui fonctionne bien.

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

Comment pourrais-je procéder à cette sélection en utilisant le constructeur de requêtes fluide de Laravel? Je sais que je peux utiliser une requête sql brute, mais j'aimerais éviter cela si possible. Toute aide serait appréciée, merci d'avance!

52
Alex Naspo

Vous pouvez utiliser un tableau dans select () pour définir plus de colonnes. Vous pouvez également utiliser DB :: raw () avec un aliasing pour les suiveurs. Devrait ressembler à ceci:

$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();
94
TLGreg
$count = DB::table('category_issue')->count();

vous donnera le nombre d'articles.

Pour plus d'informations, consultez la section Fluent Query Builder dans beautiful Laravel Documentation .

35
Sinan Eldem