# 查询
本文档已 小打卡模型为例,讲解查询函数的一些作用。
首先列出小打卡的模型结构:
1 打卡计划
2 用户
3 评论
4 标签
5 点赞
| 模型 | 关系 | 详解 |
| --- | --- |--- |
| 打卡计划-参加用户 | 1:N | 一个打卡计划可以很多人参加 |
|打卡计划-所属用户|1:1|一个打卡计划的创建者只有一个|
|打卡计划-评论|1:N|一个打卡计划有很多评论|
|打卡计划-标签|1:N|一个打卡计划有很多标签|
|打卡计划-点赞|N:N|不同的人可以对不同的打卡计划点赞|
基于以上模型 我们继续讲解下面内容
## 创建模型实体
```
var plan = new Mogo.Model("Plan");
// 这个plan 有下面的所有方法
```
## 查询列表 find(page=1)
我们经常会使用列表查询来展示内容
```
let plan = new Mogo.Model("plan");
plan.find().then(res => {
console.log(res);
});
// 如果需要第二页的数据
plan.find(2).then(res => {
console.log(res);
});
```
返回结果如下
![](https://box.kancloud.cn/1252ae432d9bbdf5641d960d77712f35_856x282.png)
## 查询个体 findOne(id)
我们也会进入详情查看打卡的具体信息
```
// 查询id 为5 的打卡计划详情
plan.findOne(5).then(res => {
console.log(res);
});
```
结果如下
![](https://box.kancloud.cn/f751c631addf9126e82c90478291d046_793x197.png)
## 条件 where(object)
对于有各种条件的查询可以使用where
where可用于搜索,类别查询
### 搜索
搜索`title`含有`刘`的打卡
```
let plan = new Mogo.Model("plan");
plan
.where({
title: ["like", "刘"]
})
.find()
.then(res => {
console.log(res);
});
```
where的使用是借助tp5where的封装,因此支持tp5 where的查询功能,具体[查阅文档](https://www.kancloud.cn/manual/thinkphp5/135182)
对于复杂查询,前端可以直接问后端
## 排序 order(string)
+ id desc 逆序 (3,2,1)
+ id asc 正序 (1,2,3)
如果我们想对`id`进行正序(1,2,3)
```
let plan = new Mogo.Model("plan");
plan
.where({
title: ["like", "刘"]
})
.order("id asc")
.find()
.then(res => {
console.log(res);
});
```
甚至可以对钱,积分进行排序获得排行榜的功能。
## 关联 with([string,....])
上面提到各种对应关系 ,可以根据后端提供的关联填入对应关系
```
let plan = new Mogo.Model("plan");
plan
.where({
title: ["like", "刘"]
})
.order("id asc")
.with(["owner", "comment.user", "joiner", "tags"]) // 获取打卡计划关联的数据
.find()
.then(res => {
console.log(res);
});
```
## 额外属性 attr([])
对于前端来说,后台有部分数据是需要计算后才能获得的,比如打卡计划持续了多久,这个就需要时间计算,但是后端可以提前做好 `getDurationAttr`
```
let plan = new Mogo.Model("plan");
plan
.where({
title: ["like", "刘"]
})
.order("id asc")
.with(["owner", "comment.user", "joiner", "tags"])
.attr(["duration"])
.find()
.then(res => {
console.log(res);
});
```
## 链式调用
where,attr,order,with 都可以链式调用
find,findOne 后只能是then函数。
- 首页
- APP
- 调试
- 部分问题解答
- IM
- 魔工坊APP框架
- 前端
- npm
- MogoAjax
- ES6
- javascript规范
- weui
- 微信小程序
- Mock数据伪造
- Mogo-Css
- O2-Upload
- 七牛图片处理
- 前端调试
- 后端
- 魔工坊海豚PHP
- 文件上传
- O2-Comments
- 前端API
- 消息
- Excel导入/导出
- 阿里短信
- dolphinPHP
- Thinkphp
- 海豚PHP
- 创建项目
- 人人商城与海豚同步问题
- mysql
- 发送HTTP请求
- 支付
- 个推
- 接口开发须知
- 生成海报
- 音频转换
- openssl
- App上架的故事
- 安卓签名问题
- 苹果账号申请
- 各个平台上架内容
- 文案小姐姐的文档
- 微信支付申请流程
- 备案的故事
- 企业支付宝认证
- 微信公众问题
- 微信开放平台与上架应用
- 小程序特殊行业所需材料
- 模型文档模板
- 必读规范
- 跨域
- 前后端数据通讯接口规范
- Restful风格API规范
- 服务器
- SSL中间证书
- Git篇章
- MogoSDK
- 文档模板
- PHP
- 使用
- 概念
- User
- 模型
- 文档书写
- JS
- 安装
- 初始化
- 用户
- 状态管理
- 查询
- 执行函数
- 请求
- 上传
- MogoH5+