首页 > 解决方案 > 列出所有基于外键的数据 android room

问题描述

我用谷歌搜索了我的问题,但我还找不到答案。

我想得到所有最喜欢的饭菜,下面是代码和我尝试过的。
结果是我只得到一顿饭,即使 dbfavoritemeal 中有 3 个数据。
预期的结果是,我将根据 dbfavoritemeal 中的所有 mealid 获得所有膳食。
请指导我

我有一个膳食课

@Entity
data class DbMeal(
    @PrimaryKey val id: Long,
    val name: String,
    val thumbnailUrl: String,
    val category: String,
    val instructions: String = "",
) {

然后我有最喜欢的课

@Entity(
    foreignKeys = [
        ForeignKey(
            entity = DbMeal::class,
            parentColumns = ["id"],
            childColumns = ["mealId"],
            onDelete = ForeignKey.CASCADE
        )],
    indices = [Index(
        value = ["mealId"],
        unique = true
    )]
)
data class DbFavoriteMeal(
    @PrimaryKey
    val mealId: Long
)

我尝试过的是在 DAO

@Query("select * from dbMeal where id = (select mealId from dbfavoritemeal)")
suspend fun getAllFavoriteDbMeal(): List<DbMeal>

标签: androidkotlinandroid-room

解决方案


你可以改变你的DAO

@Query("select * from dbMeal where id in (select mealId from dbfavoritemeal)")
suspend fun getAllFavoriteDbMeal(): List<DbMeal>

或者您可以将 isFavorite 参数添加到您的实体。

@Entity
data class DbMeal(
    @PrimaryKey val id: Long,
    val name: String,
    val thumbnailUrl: String,
    val category: String,
    val instructions: String = "",
    val isFavorite: Boolean = false,
)

你的 DAO 应该看起来像

@Query("select * from dbMeal where isFavorite = 1")
suspend fun getAllFavoriteDbMeal(): List<DbMeal>

推荐阅读