![](/img/trans.png)
[英]How do I model a Student-Class Relationship in grails ORM? Many-to-many relationship
[英]Grails: How do I fetch a sorted list of domain objects in a many-to-many relationship with sort attribute?
我的示例模型是播放列表,其中一个播放列表可以包含许多歌曲,而一首歌曲可以包含在多个播放列表中。 因此,播放列表和歌曲之间的每个映射都有一个位置参数来定义顺序。 我试图像标准Grails多对多方法那样仅用两个域对象创建此映射,但是我无法弄清楚如何以这种方式访问联接表中的position属性。 这是域对象的最新版本:
class Song {
String title
static hasMany = [ playlistSongs: PlaylistSong ]
static constraints = { title blank: false, unique: true }
}
class Playlist {
String name
static hasMany = [ playlistSongs: PlaylistSong ]
static constraints = { name blank: false, unique: true }
}
class PlaylistSong {
Playlist playlist
Song song
integer position
}
我一直试图写的查询将是使用position属性对结果进行排序,以获取给定播放列表中的歌曲。 例如,如下所示:
result = Song.executeQuery("""
SELECT s.id, s.title from Song s
inner join playlistSongs pls on s.id = pls.song.id
where pls.playlist.id = (:playlist_id)""", [playlist_id: params.playlistId])
对于这种特定的查询尝试,我在第45行附近的第3行上收到一个错误的意外令牌:
尽管可能有不止一种方法可以执行此操作,但我想找出哪种方法更适用于Grails。 谢谢!
我会在PlaylistSong
而不是Song
上进行查询。 这是使用where查询的方法:
def playlistSongs = PlaylistSong.where {
playlist.id == params.playlistId
}.list(sort: 'position', order: 'asc')
然后在您的视图中,可以显示如下歌曲:
<g:each in="${playlistSongs.collect { it.song }}" var="song">
<p>${song.title}</p>
</g:each>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.