如何通过查询

时间:2018-02-20 05:18:23

标签: elixir ecto preload

我列出了一个记录列表(Packs)。

这些包通过多对多关系链接到项目:

  • pack has_many packitems
  • item has_many packitems
  • item has_many:packs,through:[:packitems,:pack]
  • pack has_many:items,through:[:packitems,:item]

当我列出包装时,我想预加载有效商品

def list_packs(params) do
  packs = Pack
    |> preload_active_items()
    |> Repo.all()
    |> Repo.preload([:classroom, [packlanguages: :language]])
end

defp preload_active_items(query) do
  query
    |> join(:left, [pack], _ in assoc(pack, :packitems))
    |> join(:left, [_, pi], _ in assoc(pi, :item))
    |> where([..., i], i.active == true)
    |> preload([_, pi, i], [packitems: {pi, item: i}])
    # |> preload([_, pi, i], [packitems: {pi, item: ^from(i, where: i.active == true)}])
end

一切正常(我检索包及其预装的商品),但是我在那些有活动商品的上过滤了包。

我试图用虚线替换where子句,但语法不正确。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我终于找到了自己的方式:

    FILE* fp = android_fopen("www/backspace.png","rb");
    if(fp = NULL){
        LOGI("CANNOT OPEN BACKSPACE FILE");
        return;
    }


    fseek(fp,0,SEEK_END);
    long fsize = ftell(fp);
    fseek(fp, 0, SEEK_SET);