1

似乎蒸气添加了新功能eagerLoad并删除了alsoDecode. 对于那些拥有亲子或兄弟关系的人来说很方便。但不适合那些没有关系的人。

我想实现一个树结构,其节点不能(或者我不知道如何)参与关系。节点有一个父节点和许多子节点,它们也是节点。

所以我有这个结构的三个表。

Tree:

| Field       | Type            |  
| ----------- | --------------- |  
| id          | UUID?           |  
| name        | String          |  
| nodes       | [Node]          |
| paths       | [Path]          |

Nodes:
| Field         | Type                       |  
| ------------- | -------------------------- |  
| id            | UUID?                      |  
| type          | NodeType(root, leaf, node) |    
| tree          | Tree                       |

Path:
| Field        | Type      |  
| ------------ | --------- |  
| id           | UUID?     |  
| distance     | Int       |  
| ancestorID   | UUID      |  
| descendantID | UUID      |  
| tree         | Tree      |

问题是我是否想做

SELECT Nodes.id, Nodes.type, Path.ancestorID from Nodes
INNER JOIN Path
ON Nodes.id = Path.descendantID

如何编写代码。

4

1 回答 1

2

您也可以选择投射到SQLDatabase. 确保也导入SQLKit,Fluent 数据库始终可以转换为 SQLDatabase。

例如:let sqlDb = req.db as? SQLDatabase将使您能够使用自定义查询,例如:sqlDb?.select().from("Nodes").join("Path", on: "Nodes.id = Path.descendantId").all()

有关 SQLKit 的更多信息,请参见:https ://github.com/vapor/sql-kit

参考:https ://docs.vapor.codes/4.0/fluent/advanced/ (任何 Fluent 数据库都可以转换为 SQLDatabase。这包括 req.db、app.db、传递给 Migration 的数据库等)

于 2020-06-23T10:04:03.527 回答