Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Count the Number of Entries in an Ecto Repository

Whats the quickest way to see the number of entries in my database? I'd like to see the number of posts in my posts/index view.

Say I have a Post model and a bunch of posts saved in my database. In Rails I could do something like this in a view file:

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

or

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

or

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

What's the Phoenix Framework/Elixir equivalent?

like image 519
Andrew Hendrie Avatar asked Apr 17 '16 23:04

Andrew Hendrie


2 Answers

The options that Dogbert has provided are both correct and should be used for Ecto 1.x.

In Ecto 2.0 you can use Repo.aggregate/4

Repo.aggregate(Post, :count, :id)
like image 200
Gazler Avatar answered Nov 01 '22 06:11

Gazler


If you've already loaded the posts in memory in your controller using Repo.all, you can use length/1 to count the number of items in the list. This is equivalent to .length in Ruby/Rails.

length(@posts)

If you want to run the count query in the database instead, you can do:

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

You can also add where: filter to the query to restrict the posts to e.g. created by a specific user. This is equivalent to doing .count in Rails.

like image 30
Dogbert Avatar answered Nov 01 '22 06:11

Dogbert