Backendless iOS:中间 table 介于两个 table 之间

Backendless iOS: intermediate table between two tables

我是 Backendless 的新手,我已经阅读了所有关于关系的手册,但仍然不确定如何在两个 table 之间创建中间层 table。 例如,我有 table 个调用用户和 table 个调用事件。用户可以订阅事件。所以我想要新的 table UserEvents,它有 user_id 和 event_id。另外,我将如何检索用户添加的所有事件?换句话说,如何在 Backendless 中进行连接?(我想没有连接,但一切都简单得多)。 非常感谢!

这里有两个不同的问题:

  1. 如何创建对象之间的关系?
  2. 如何加载用户创建的对象?

让我们从第一个开始:

如何创建对象之间的关系?

当您使用 Backendless 时,重要的是从对象而不是 table 的角度来思考。例如,如果有一个名为 Order 的实体并且它包含一个 OrderItem 对象的集合,那么这就是您的数据结构。您不需要在控制台中预先创建 tables – Backendless 会在您第一次保存包含 OrderItems 集合的 Order 对象时为您完成。但是,如果您想在我们的控制台中手动执行此操作,请执行以下步骤:

  1. 登录控制台,select一个应用程序,点击数据
  2. 创建 table 订单(最好以单数形式命名 tables - 所以是订单,而不是订单)。
  3. 当你创建一个新的table时(点击左下角的“+”按钮),控制台会提示你切换到Schema Editor,这样你就可以添加一些数据列了。列将对应于 class 中的 属性,它表示 table.
  4. 中的记录
  5. 现在订单 table 已就位,对订单项 table 重复该过程。
  6. 一旦 table 都存在,我们需要 "link" table 在一起。 link 将建立一对一或一对多的关系。为此,select 命令 table 并单击右上角的 Table 模式和权限 红色按钮。
  7. 单击添加关系 按钮。
  8. 在出现的弹出窗口中,您需要创建一个 属性,其中将包含订单项目对象的集合。将 属性 "orderItems" 命名为(这里可以使用复数形式)。在弹出窗口 select 的右侧,OrderItem table。在多重性下拉列表中 select 许多。
  9. 单击保存。至此关系建立。

要查看它的工作情况,您可以使用代码生成模块,该模块将为您提供使用 table 的所有源代码。单击 代码生成 图标。在 Android 部分,select EclipseIDEA 在 IDE 块中,然后单击 Java classes for defined data tables 选项。单击 下载项目 。 Backendless 将生成一个 ZIP 文件,其中包含客户端 classes 的源代码,使您可以在 tables 上执行完整的 CRUD(创建、检索、更新、删除)范围的操作。

文档描述了如何使用相关数据。例如,参见 approaches and API for retrieving related objects.

当涉及到如何加载用户创建的对象的问题时,事情就简单多了。那么我们来到第二个问题:

如何加载用户创建的对象?

上述方法同样适用于 link 内置用户 table 和任何其他 table。但是,特别是对于用户 table,link/relationship 不是必需的。这样做的原因是 Backendless 会自动用 "owner" 的 ID 标记任何创建的对象,即创建该对象的用户。那个"tag"可以在Userstable中用特殊的ownerId属性看到。为了能够检索属于用户的对象,我们需要修改 table 的安全权限,其中包含用户创建的对象:

  1. 登录到控制台,select 您的应用程序并单击“数据”图标。
  2. Select table 包含用户创建的对象。
  3. 单击屏幕右上角的Table安全和权限红色按钮。
  4. 单击角色权限菜单项。
  5. Find 列和 AuthenticatedUser 行的交叉点找到单元格。单击该单元格,直到您看到一个红叉。
  6. Find 列和 NotAuthenticatedUser 行的交集重复上一步。

此时,您限制了已验证和未验证(来宾)用户对 table 的所有访问。下一步将允许所有者检索他们创建的对象。

  1. 单击所有者政策菜单项。
  2. 单击“查找”列中的单元格,直到出现绿色复选标记。
  3. 此时,当您调用 table 上的任何 Find 方法时,Backendless 将 return 仅属于当前登录用户的对象。