多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 查询 本文档已 小打卡模型为例,讲解查询函数的一些作用。 首先列出小打卡的模型结构: 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函数。