У меня есть следующая схема:
defmodule MyApp.Folder do
use Enterprise.Web, :model
schema "folders" do
has_many(:contracts, MyApp.Contract)
has_many(:child_folders, MyApp.Folder, foreign_key: :parent_id)
end
end
Как видите, каждая папка может иметь рекурсивное количество дочерних папок, каждая из которых имеет свои дочерние папки и т. Д. В моем контроллере папок я хочу подсчитать общее количество контрактов, содержащихся в каждой папке, и всех контрактов в ее дочерних папках и т. Д.
Скажите, у меня есть папка с именем root
. Если я хочу посчитать количество контрактов на верхнем уровне папки, я могу просто позвонить length(root.contracts)
. Однако я до сих пор не принял во внимание дочерние папки root
и количество контрактов в каждой дочерней папке, и если каждая дочерняя папка спускается в дерево дочерних папок и их контрактов.