Realm рекурсивный запрос - Android - PullRequest
0 голосов
/ 08 июля 2019

У меня есть несколько экземпляров в Realm: FeedItem с полем movie с типом Movie.Movie содержит поле showTimes, то есть List из ShowTime объектов.

-FeedItem:
  └ movie: Movie
      └ showTimes: List<ShowTime>
                           └ minPrice: Float

И мне нужно запросить все элементы FeedItem, содержащие Movie, которые содержат хотя бы один Showtime с заданным значением для поля minPrice.

Я мог бы использовать что-то вроде этого:

Realm.getDefaultInstance().where(FeedItem::class.java)
                                    .beginGroup()
                                    .equalTo(FeedItem::movie.name + "." + Movie::showTimes.name + "." + ShowTime::minPrice.name, 10f)
                                    .endGroup()
                                    .findAll()

Но showTimes - это List, и мне нужно проверить все элементы.

Из-за существующей архитектуры проекта я не могу запросить все элементы FeedItem и затем отфильтровать их.Поэтому я не могу использовать простое решение, подобное этому:

val feed = Realm.getDefaultInstance().where(FeedItem::class.java).findAll()

val filteredFeed = feed.filter { feedItem ->
    var b = false
    feedItem.movie.showTimes.forEach { showtime ->
        b = showtime.minPrice == 10f
    }
    b
}

И единственный способ решить мою проблему - написать один сложный запрос в Realm.Подскажите, пожалуйста, как мне это сделать?

1 Ответ

1 голос
/ 09 июля 2019

Я нашел решение: Как запросить RealmObject, у которого RealmList содержит указанное значение

Итак, в моем случае:

Realm.getDefaultInstance().where(FeedItem::class.java).beginGroup()
          .greaterThanOrEqualTo(FeedItem::movie.name
                        + "."
                        + Movie::showTimes.name
                        + "."
                        + ShowTime::minPrice.name,
                        10f)
           .endGroup()
...