Как выбрать все столбцы из таблицы соединений в steam 4? - PullRequest
1 голос
/ 21 июня 2020

Кажется, что steam добавляет новую функцию 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

Как писать коды.

1 Ответ

2 голосов
/ 23 июня 2020

Вы также можете применить к 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 можно преобразовать в базу данных SQL. Это включает req.db , app.db, база данных передана в Migration, et c.)

...