gpt4 book ai didi

android - SQLDelight 关系

转载 作者:行者123 更新时间:2023-12-04 23:46:58 28 4
gpt4 key购买 nike

我想用 SQLDelight 建模关系,尤其是 一对多关系。
我有 2 张 table :recipeingredient .为简单起见,它们看起来像这样:

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,
    )
    有没有什么好的方法可以用一个生成的函数来检索数据(配方 + 成分列表)?类似于 Rooms 的东西 @Embedded@Relation注释。

    最佳答案

    不幸的是,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_ }
    }

    关于android - SQLDelight 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68632268/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com