本文转载请注明出处 —— polobymulberry-博客园

简介

Bmob中的数据关联分为Pointer和Relation两种(数据关联在我开发app过程中使用还是很频繁的,也算个难点。虽然之前没有学过数据库,但是觉得还是有必要熟悉和掌握它),对此,Bmob官方文档已经介绍得很详细了。

基本上查看文档就可以解决大部分数据关联的问题(Bmob的文档真心要赞一下)。这里我记录下当时我最难理解的一个部分——查询关联关系

还是使用官方文档的事例来学习(这一处官网有些地方的objectId书写错了,记录下时间2015-09-14)。

Post表(所有用户发表的文章都放在Post表中content指文章内容,title指文章标题,author是Pointer类型,指向_User表)

_User表(username表示用户名,password表示用户密码)

举例

我们的任务是查询(喜欢Post表中objectId为a397e97451这篇文章的所有用户,简单说就是查找objectId为a397e97451文章中likes中关联(Relation)的所有User)。

   //关联对象表
BmobQuery *bquery = [BmobQuery queryWithClassName:@"_User"]; //需要查询的列
BmobObject *post = [BmobObject objectWithoutDatatWithClassName:@"Post" objectId:@"a397e97451"];
[bquery whereObjectKey:@"likes" relatedTo:post]; [bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%@",error);
} else {
for (BmobObject *user in array) {
NSLog(@"%@",[user objectForKey:@"username"]);
}
}
}];

以上时官网给出的查询代码。但是我一开始实在无法理解这种查询方式,bquery明显和“likes”和post不是一条路上的。直到我看到了下面这句话:

跟Pointer不同的是,此处Relation查询的本质是_User表。

所以上面代码实际上做的是什么工作了?

1.因为我们要找的是所有喜欢这篇文章的User,所以我们先在_User表中查找所有User。

2.但是我们上一步所找到的User很多不喜欢这篇文章,所以得有一个筛选方法。而这个筛选方式就是whereObjectKey:relatedTo:,relatedTo指向的就是我要查询的那篇文章,而whereObjectKey指向的就是该文章对应的User关联关系。至于为什么要加whereObjectKey,是因为Post表中可能有多个关联User的关系,比如后期可能加入所以点评该文章的用户(关联User的关系)。我们可以这样理解,上一步的bquery中存放着_User表中所有User,而Post的likes中存放的是喜欢该文章User的objectId(或指针之类的统一标识)。然后遍历所有User,找到对应objectId相等的User,存取下来,作为查找结果。(以上纯属猜测!!!)

NSMutableArray *searchResult = 初始化;
for(BmobUser *user in _User表中所有User)
{
if (user.objectId 等于post的likes中某个objectId )
{
        [searchResult addUser:user];
}
}
return searchResult; // 存放了所要查询的User

总结

【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)的更多相关文章

  1. 【原】使用Bmob作为iOS后台开发心得——云端代码添加其他User的Relation关系

    本文转载请注明出处 —— polobymulberry-博客园 问题描述 我在User表中增加了两个列,分别为“我关注的人”(Relation关系)和“我的粉丝”(Relation关系)当我关注某个人 ...

  2. IOS开发之----详解在IOS后台执行

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  3. 安卓版App开发心得

    从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...

  4. ios新手开发——toast提示和旋转图片加载框

    不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经 ...

  5. iOS多线程开发

    概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...

  6. iOS企业级开发初级课程-表视图(13集)

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

  7. iOS界面开发

    [转载] iOS界面开发 发布于:2014-07-29 11:49阅读数:13399 iOS 8 和 OS X 10.10 中一个被强调了多次的主题就是大一统,Apple 希望通过 Hand-off ...

  8. iOS移动开发周报-第25期

    iOS移动开发周报-第25期 [摘要]:本期iOS移动开发周报带来如下内容:苹果发布 iPhone6 和 Apple Watch.Swift 1.0 GM发布.Xcode 6支持PDF Vector作 ...

  9. iOS移动开发周报-第24期

    iOS移动开发周报-第24期 [摘要]:本期iOS移动开发周报带来如下内容:苹果更新了iTunes Connect的设计.UIKit Dynamics 教程:抛掷 Views.iOS APP 架构漫谈 ...

随机推荐

  1. Fis3的前端模块化之路[基础篇]

    Fis3版本:v3.4.22 fis3是一个构建工具 解决前端开发中自动化工具.性能优化.模块化框架.开发规范.代码部署.开发流程等问题. 安装 npm install -g fis3 运行 fis3 ...

  2. Carousel 旋转画廊特效的疑难杂症

    疑难杂症 该画廊特效的特点就是前后元素有层级关系. 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程.不知道这个插件的原型是哪个,有知道的朋友可以告诉我. 该插件相对完美, ...

  3. 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载

    title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...

  4. TypeScript为Zepto编写LazyLoad插件

    平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...

  5. 《你不知道的JavaScript》整理(四)——原型

    一.[[Prototype]] JavaScript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用. var myObject = { a: 2 }; myObje ...

  6. SAP CRM 性能小技巧

    导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...

  7. Openfire阶段实践总结

    从3月开始研究Openfire,其实就是要做一套IM系统,也正是这个原因才了解到Openfire.之前还真没想过有这么多的开源产品可以做IM,而且也没想到XMPP这个协议竟然如何强大.看来还是标准为先 ...

  8. ASP.NET Aries DataGrid 配置表头说明文档

    DataGrid 配置表头 字段 中文 说明 Field 字段 注意:mg_ 开头的字段为层级表头 Title 列称 OrderNum 序号 显示的顺序(冻结和非冻结列是两个组的序号) Width 列 ...

  9. 使用Xamarin开发iOS7应用时隐藏StatusBar方法

    在iOS7之前如果需要隐藏StatusBar,比较简单,直接在AppDelegate.cs中使用如下代码就可以进行隐藏: UIApplication.SharedApplication.StatusB ...

  10. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...