我想用SQLDelight来建模关系,特别是到多个的关系。
我有两张桌子:recipe和ingredient。为了简单起见,它们如下所示:
CREATE TABLE recipe (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
)
CREATE TABLE ingredient (
recipe_id INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY (recipe_id) REFERENCES recipe(id) ON DELETE CASCADE
);所以我有一个食谱列表,每个食谱都可以包含0-n种成分。
我有两个目标:
我很确定第一个只能手动完成,例如插入食谱然后手动插入相关成分。
对于后一种情况,我试图用以下语句加入这些表:
selectWithIngredients:
SELECT *
FROM recipe
INNER JOIN ingredient ON recipe.id = ingredient.recipe_id
WHERE recipe.id=?;SQLDelight为其生成1:1关系文件:
public data class SelectWithIngredients(
public val id: Long,
public val name: String,
public val recipe_id: Long,
public val name_: String,
)有什么好的方法可以用一个生成的函数检索数据(配方+配料列表)吗?类似于房间 @Embedded和@Relation注释。
发布于 2021-08-07 09:24:01
不幸的是,SQLDelight并不那么精致。它所做的就是为查询的每一行提供一个数据类,如果您想执行更复杂的逻辑,比如将一个表映射到其他表的列表,而不是您自己在kotlin中需要这样做的话。
例如有这样的食谱
data class Recipe(val name: String, val ingredients: List<String>)你可以通过你的选择来做到这一点。
val rows: List<SelectWithIngredients>
rows.groupBy { it.name }
.map { (recipe, selectRows) ->
Recipe(name, selectRows.map { it.name_ }
} https://stackoverflow.com/questions/68632268
复制相似问题