Comment sélectionner compte avec le créateur de requêtes courant de Laravel?

Voici ma requête utilisant un générateur de requêtes fluide.

$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 voir, je commande par un compte de la table jointe. Cela fonctionne bien. Cependant, je veux que ce compte soit retourné 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 générateur de requêtes courant de Laravel? Je sais que je peux utiliser une requête SQL brute mais je voudrais éviter cela si possible. Toute aide serait appréciée, merci d’avance!

Vous pouvez utiliser un tableau dans select () pour définir plus de colonnes et vous pouvez utiliser la firebase database DB :: raw () avec l’aliasing pour les abonnés. 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(); 
 $count = DB::table('category_issue')->count(); 

vous donnera le nombre d’articles.

Pour plus d’informations, consultez la section Générateur de requêtes Fluent dans la belle documentation Laravel .