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

最佳答案

这里有两个单独的问题:


如何在对象之间建立关系?
如何加载用户创建的对象?


让我们从第一个开始:

如何在对象之间建立关系?

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


登录到控制台,选择一个应用程序,然后单击“数据”。
创建表Order(最好以单数形式命名表-因此使用Order而不是Orders)。
创建新表时(单击左下角的“ +”按钮),控制台将提示您切换到模式编辑器,以便您可以添加一些数据列。列将对应于类中的属性,该属性表示表中的记录。
现在已经有了Order表,对OrderItem表重复该过程。
一旦两个表都存在,我们需要将表“链接”在一起。该链接将建立可以一对一或一对多的关系。为此,选择“订单”表,然后单击右上角的“表模式和权限”红色按钮。
单击添加关系按钮。
在出现的弹出窗口中,您将需要创建一个属性,其中将包含订单项对象的集合。将属性命名为“ orderItems”(可以在此处将其复数)。在弹出窗口的右侧,选择OrderItem表。在“多重性”下拉列表中,选择“多”。
单击保存。至此,关系建立。


要查看其工作原理,您可以使用代码生成模块,该模块将为您提供用于处理表的所有源代码。单击代码生成图标。在“ Android”部分中,在IDE块中选择Eclipse或IDEA,然后单击“ Java class for Defined Data Tables”选项。单击下载项目。 Backendless将使用客户端类的源代码生成一个ZIP文件,该文件可让您对表执行完整的CRUD(创建,检索,更新,删除)操作。

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

关于如何加载用户创建的对象的问题,事情变得简单了。因此,我们得出第二个问题:

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

上述方法对于将内置的Users表与任何其他表进行链接同样有效。但是,特别是对于“用户”表,该链接/关系不是必需的。这样做的原因是Backendless自动将所有创建的对象标记为“所有者”的ID,即创建对象的用户。可以在Users表中使用特殊的ownerId属性看到该“标记”。为了能够检索属于用户的对象,我们需要修改包含用户创建的对象的表的安全权限:


登录到控制台,选择您的应用,然后单击“数据”图标。
选择带有用户创建的对象的表。
单击屏幕右上角的“表安全性和权限”红色按钮。
单击角色权限菜单项。
在“查找”列和“ AuthenticatedUser”行的交点处找到单元格。单击该单元格,直到看到一个红叉。
对“查找”列和“ NotAuthenticatedUser”行的交点重复上一步。


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


单击所有者策略菜单项。
单击“查找”列中的单元格,直到有一个绿色的复选标记。
此时,当您在该表上调用任何Find方法时,Backendless将仅返回属于当前登录用户的对象。

10-04 15:01