Flutter
...
Data Objects
Flutter 中 Parse SDK 实现多对多关系的详细指南
10 分
flutter中的多对多关系 介绍 在之前的指南中,我们学习了如何使用一对多关系,我们将继续我们的项目。在本指南中,我们将重点关注最常见的关系:多对多关系。在parse中有三种方法可以创建多对多关系。 第一种是使用parse 关系 关系 , 这是创建和查询时间最快的方法。我们将在本指南中使用此方法。 第二种是使用 数组 数组 的 指针 指针 ,这可能会导致查询时间变慢,具体取决于它们的大小。 第三种是使用 连接表 连接表 ,这是经典数据库中的一个概念。当存在多对多关系时,我们将每个 objectid objectid 或 指针 指针 从两边组合在一起,以构建一个新的单独表格,在其中跟踪关系。 在本指南中,您将实现一个 多对多 多对多 关系,在一个flutter图书注册应用程序中使用parse 关系 关系 您将学习如何创建和查询多对多数据关系,以及如何执行查询以返回来自相关对象的数据,使用back4app和flutter sdk。 前提条件 android studio https //developer android com/studio 或 安装 vs code (带有 插件 dart 和 flutter) 注意:在之前的指南中创建的 flutter 应用 完成之前的指南,以便更好地理解 一对多关系 一对多关系 类 一台运行 android 或 ios 的设备(或虚拟设备)。 1 运行图书应用模板 如果您尚未完成之前的指南,您可以从我们的代码库中克隆并运行完整的 图书 flutter 应用 https //github com/templates back4app/flutter associations 项目。您还可以查看 之前的指南 https //www back4app com/docs/flutter/parse sdk/data objects/%7bsite baseurl%7d%7d//flutter/parse sdk/data objects/flutter one to many relationship 以更好地理解应用模板。下面您可以找到图书注册数据模型的可视化表示。 2 保存一本书对象及其作者 打开之前指南中的 flutter 项目 flutter 中的一对多关系 https //www back4app com/docs//flutter/parse sdk/data objects/flutter one to many relationship 。搜索文件中的函数 dosavebook dosavebook ,并在 main dart main dart 文件中用下面的代码替换它。这个函数将在 back4app 数据存储中创建一个新的书籍对象,并建立关系。 1 final book = parseobject('book') 2 set('title', controllertitle text trim()) 3 set('year', int parse(controlleryear text trim())) 4 //the objectid will be converted to a pointer on the save() method 5 set('genre', parseobject('genre') objectid = genre objectid) 6 //you can also convert to a pointer object before the saving using the topointer() method 7 set('publisher', 8 (parseobject('publisher') objectid = publisher objectid) topointer()) 9 //saving a list of authors for the book 10 addrelation( 11 'authors', 12 authors 13 map((o) => parseobject('author') objectid = o objectid) 14 tolist()); 15 16 await book save(); 要构建此函数,请按照以下步骤操作: 1\ 创建一个新的 parse 实例 书籍 书籍 类,使用命令 parseobject('书籍') parseobject('书籍') 2 使用 设置 设置 函数来设置此对象的字段。 2 1 标题 标题 是一个文本属性,从文本控制器接收值。 2 2 类型 类型 通过定义一个 parseobject parseobject 与 objectid objectid 的选定 类型 类型 ( parse将在保存时转换为指针 ) 2 3 发布者 发布者 通过定义一个 parseobject parseobject 来接收值, objectid objectid 的选定 发布者 发布者 ( 请注意,我们可以为 parse 指定我们想要保存为一个 指针 指针 使用 topointer() topointer() 方法 ) 2 4 作者 作者 我们称之为 addrelation addrelation 方法的 parseobject parseobject , 发送一个 parseobject parseobject 的列表,带有 objectid objectid 的选定 作者 作者 3 调用 保存 保存 函数在 parseobject parseobject , 这将有效地将对象注册到您的数据库中,在 back4app 控制面板中 运行应用程序并测试新的 dosavebook() dosavebook() 函数 首先,访问仪表板并删除在之前指南中注册的书籍。 点击 添加书籍 添加书籍 按钮。 填写书籍信息和作者。 点击 保存书籍 保存书籍 按钮 要确认新对象是否与关系一起保存在数据库中,您可以访问 back4app dashboard back4app dashboard 并访问 book book 类。 在您的仪表板中点击对象指针/关系值将带您到引用的对象条目。这看起来可能是一个无害的功能,但这使得调试和错误追踪比手动搜索快得多。 3 查询带有关系的书籍详情 此功能将在 back4app 数据库中查询书籍详情,返回关系数据。在某些情况下,您可能希望在一个查询中返回多种类型的相关对象。您可以使用 includeobject includeobject 方法来实现。在我们的示例中,我们希望返回书籍,并包含来自类型和出版商的信息。 在文件中搜索函数 getbookdetail getbookdetail ,然后在 main dart main dart 文件中替换以下代码 getbookdetail(parseobject book) getbookdetail(parseobject book) 函数 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('objectid', book objectid) 4 includeobject(\['publisher', 'genre']); 5 6 final parseresponse responsebook = await querybook query(); 7 8 if (responsebook success && responsebook results != null) { 9 final book = (responsebook results first) as parseobject; 10 booktitle = book get\<string>('title'); 11 bookyear = book get\<int>('year'); 12 bookgenre = book get\<parseobject>('genre') get\<string>('name'); 13 bookpublisher = book get\<parseobject>('publisher') get\<string>('name'); 14 loadeddata = true; 15 } 16 17 querybuilder\<parseobject> queryauthors = 18 querybuilder\<parseobject>(parseobject('author')) 19 whererelatedto('authors', 'book', book objectid); 20 21 final parseresponse responseauthors = await queryauthors query(); 22 23 if (responseauthors success && responseauthors results != null) { 24 bookauthors = responseauthors results 25 map((e) => (e as parseobject) get\<string>('name')) 26 tolist(); 27 } 要构建此函数,请按照以下步骤操作 创建一个 parsequery parsequery 对象的实例,用于 book book 类。插入一个条件到查询中,以搜索 books books ,其中 objectid objectid 字段等于所选书籍的 objectid objectid 。 我们使用 includeobject 方法,告知我们希望在同一查询中返回的指针字段:类型和出版商。您还可以使用点表示法进行多级 includeobject。示例:` includeobject(\[‘post’, ‘post authors’]); 使用 query() query() 方法进行查询的搜索。 如果操作成功,将返回 book book 中的对象。 我们使用 get 方法来检索数据。对于指针字段,我们首先需要检索指针,然后获取其数据。示例: bookgenre = book get\<parseobject>('genre') get\<string>('name'); bookgenre = book get\<parseobject>('genre') get\<string>('name'); 在处理的第二阶段,我们需要恢复与书籍相关的作者。 要构建此功能,请按照以下步骤操作: 为 parsequery parsequery 类创建一个 authors authors 对象。在查询中插入一个条件,使用 whererelatedto whererelatedto 操作符来搜索 authors authors 与 book book , 其中 book book 等于所选书籍的 objectid objectid 。 使用 query() query() 方法进行查询的搜索。 如果操作成功,将返回 book book 中的对象。 我们使用 get 方法来检索数据。 运行应用程序并测试新的查询。 首先,点击 列表出版商/书籍 列表出版商/书籍 按钮。 从列表中选择一本书。下一个屏幕将显示书籍及其关系的数据。 完成! 此时,您已学习如何创建和查询多对多关系,以及如何在 flutter flutter 中执行返回相关对象数据的查询。