假设我有一个模块$qb->expr()->in('u.id', ':ids');
->setParameter('ids', $id)
,它有以下方法:
MyApp.User
有没有办法将上面代码中的def update_some_counter(user) do
from(u in MyApp.User , where: u.id == ^user.id)
|> Repo.update_all(inc: [some_counter: 1])
end
更改为某个检索当前模块的方法?
答案 0 :(得分:17)
__MODULE__
。但是,我建议您在模型中的所有查询函数接收查询作为参数(请参阅此处:http://blog.drewolson.org/composable-queries-ecto/)并且不要在模型中调用存储库。
将存储库(这是副作用)的行为留给集成层,如控制器,什么不是。
答案 1 :(得分:8)
您可以使用__MODULE__
,它将在编译时替换为封闭模块的名称。
答案 2 :(得分:0)
您可以使用特殊格式__CALLER__
来访问调用模块的名称。
答案 3 :(得分:0)
您可以为封闭模块起别名,如:
defmodule MyApp.User
alias MyApp.User
...
some_function(User)
,然后直接引用User
。简化的方法是像这样对__MODULE__
进行别名:
defmodule MyApp.User
alias __MODULE__
...
some_function(User)