web-dev-qa-db-fra.com

Compter le nombre d'entrées dans un référentiel Ecto

Quelle est la façon la plus rapide de voir le nombre d'entrées dans ma base de données? Je voudrais voir le nombre de publications dans ma vue publications/index.

Disons que j'ai un modèle de publication et un tas de publications enregistrées dans ma base de données. Dans Rails je pourrais faire quelque chose comme ça dans un fichier de vue:

<h1><%= @posts.length %> Posts</h1>

ou

<h1><%= @posts.size %> Posts</h1>

ou

<h1><%= @posts.count %> Posts</h1>

Qu'est-ce que l'équivalent Phoenix Framework/Elixir?

27
Andrew Hendrie

Si vous avez déjà chargé les messages en mémoire dans votre contrôleur à l'aide de Repo.all, vous pouvez utiliser length/1 pour compter le nombre d'éléments dans la liste. Cela équivaut à .length en Ruby/Rails.

length(@posts)

Si vous souhaitez plutôt exécuter la requête de comptage dans la base de données, vous pouvez:

Repo.one(from p in Post, select: count("*"))

Vous pouvez également ajouter where: filtrez la requête pour restreindre les publications, par exemple créé par un utilisateur spécifique. Cela revient à faire .count dans Rails.

29
Dogbert

Les options fournies par Dogbert sont à la fois correctes et doivent être utilisées pour Ecto 1.x.

Dans Ecto 2.0, vous pouvez utiliser Repo.aggregate/4

Repo.aggregate(Post, :count, :id)
65
Gazler