现在我有以下两个课程:
final class Song: MySQLModel {
var id: Int?
var lyrics: String
var artist: String
var title: String
var strummingPattern: String
init(id: Int? = nil, title: String, lyrics: String, artist: String, strummingPattern: String) {
self.id = id
self.lyrics = lyrics
self.title = title
self.artist = artist
self.strummingPattern = strummingPattern
}
}
extension Song {
var chords: Children<Song, SongChord>{
return children(\.songID)
}
}
final class SongChord: MySQLModel {
var id: Int?
var songID: Int
var chord: String
var position: Int
init(id: Int? = nil, chord: String, position: Int, songID: Int) {
self.songID = songID
self.id = id
self.chord = chord
self.position = position
}
}
extension SongChord {
var chords: Parent<SongChord, Song>{
return parent(\.songID)
}
}
我想返回所有Song
及其子SongChord
的列表。到目前为止,我想出了:
return Song.query(on: req)
.join(\SongChord.songID, to: \Song.id)
.alsoDecode(SongChord.self)
.all()
但是这将返回错误“无法将类型'EventLoopFuture <[((Song,SongChord)] >>)的值转换为结束结果类型'_'”。网上有些人建议做平面图,但这仍然会产生错误。关于如何找回孩子的任何建议将不胜感激。
答案 0 :(得分:1)
由于错误提示您返回exec:rev
。如果您从EventLoopFuture<[(Song, SongChord)]>
解码多个模型,则每个结果行将收到query result
和Song
的Tupel;您现在要做的是:
SongChord
),该结构符合SongViewModel
并具有Content
和另一个称为Song
的变量的所有相关字段。原因是,原始的chords: [SongChords]
模型没有Song
的数组,而只有SongChord
的数组,您无法轻松地解析Children<Song, SongChord>
从Map
到[(Song, SongChord)]
的结果。这可能对您转换元组数组很有帮助:https://stackoverflow.com/a/31220067/710350 [SongViewModel]