Подсчитайте количество записей в репозитории Ecto
Каков самый быстрый способ увидеть количество записей в моей базе данных? Я хотел бы видеть количество сообщений в моем сообщении/индексном представлении.
Скажем, у меня есть модель Post и куча сообщений, сохраненных в моей базе данных. В Rails я мог бы сделать что-то подобное в файле вида:
<h1><%= @posts.length %> Posts</h1>
или
<h1><%= @posts.size %> Posts</h1>
или
<h1><%= @posts.count %> Posts</h1>
Что эквивалентно эквиваленту Phoenix Framework/Elixir?
Ответы
Ответ 1
Если вы уже загрузили сообщения в память вашего контроллера с помощью Repo.all
, вы можете использовать length/1
для подсчета количества элементов в списке. Это эквивалентно .length
в Ruby/Rails.
length(@posts)
Если вы хотите запустить запрос подсчета в базе данных, вы можете сделать:
Repo.one(from p in Post, select: count("*"))
Вы также можете добавить фильтр where:
к запросу, чтобы ограничить сообщения, например. созданный конкретным пользователем. Это эквивалентно выполнению .count
в Rails.
Ответ 2
Параметры, которые Dogbert предоставили, являются правильными и должны использоваться для Ecto 1.x.
В Ecto 2.0 вы можете использовать Repo.aggregate/4
Repo.aggregate(Post, :count, :id)