预加载嵌套关联查询

preload nested association query

我正在尝试在查询预加载中进行排序。这是我的查询:

query =
      from(
        p in Project,
        preload: [rows: {from(r in Row, order_by: r.index), [images: from(r in Row, order_by: r.index)}]],
        where: p.user_id == ^user_id
      )

但这不起作用并给我一个语法错误:

** (SyntaxError) web/controllers/project_controller.ex:11: "{" is missing terminator "}". unexpected token: ")" at line 13

有人知道如何使用 Ecto 预加载嵌套属性吗?

您收到此 SyntaxError,因为括号不平衡。

以下代码修复了这个问题:

query =
  from(
    p in Project,
    preload: [rows: {from(r in Row, order_by: r.index), images: from(r in Row, order_by: r.index)}],
    where: p.user_id == ^user_id
  )

但实际上,如果你有 Projecthas_many rowsRowhas_many images,然后预加载这些关联将变得如此简单,如下所示:

from p in Project, preload: [rows: :images]