上一个笔记记录了如何用云开发函数实现数据的查找和增加,今天就继续用我之前的例子来实现商品的更新和删除操作吧。
首先是更新操作,为了方便起见,先只更新下书本的价格,在前端设置输入框和点击事件,js获取输入的内容,然后按钮点击事件调用云开发函数进行数据更新。
实现修改数据的方法写在点击事件对应的函数里:
然后就是测试是不是能根据输入修改价格,但发现弹出提示“更新成功”,但价格那一栏的数据并没有更新,既然显示”更新成功”,那么操作数据的权限肯定是没有问题的,我也实时用this.getDatail()刷新了数据,为了数据没有更新?
经过查找,原来在数据库用手动方式添加的数据,本身不携带字段_openid,没有_openid字段的数据无法更新通过这种简单的方式更新数据:
这里貌似需要用到云函数的相关知识,这里如果要实现更新,只能给数据自己加上一个字段_openid。而如果通过wx.cloud.database.collection(“表名”).add添加的数据,默认会携带添加数据时的_openid,因此,可以对数据进行修改。这可能是微信处于安全方面的考虑吧,也就是说用户只能修改自己创建的数据,而不用轻易修改开发者创建的数据。
然后是删除操作,首先是简单的页面:
依然是button点击事件进行触发,这里删除操作是有风险的,一般建议不删除,即使要删除,也可以设置一个“deletestatus”字段,删除时将字段值由0设置为1,因为数据一旦删除就没有了,而不知道什么时候又能用到,尤其是诸如订单、查询历史这些信息。当然这里还是直接删除,用wx.showmodel()弹出确认框,接下来是删除操作的函数:
然鹅,点击确认删除后,事情没有想象地那么简单,系统弹出警告:
权限我已经打开,既然又是无法删除,会不会又是_openid没有所导致的?于是我通过wx.cloud.database.collection(“表名”).add添加数据,这样该条数据会默认携带我的openid,然后点击删除这条数据,显示成功:
这么看来,数据有无_openid在更新和删除权限上是有区别的,一般我们添加数据也是管理员或者用户添加,会生成_openid字段,这样才有更新和删除的权限。当然,我觉得没有_openid的字段应该也可以有权限更新删除,可以继续学习学习。这点和传统后端有点不同,传统后端倒是没有太多权限方面的考虑(有可能是我没涉及到),而且后端查询异常需要自己捕获和处理,小程序这边自己帮我们很好的进行了处理。
下面是最基本的增删改查操作的汇总:
//查询操作
wx.cloud.database().collection("表名")
.doc("数据对应的_id") //查询单条记录时可以用_id绑定
.where({ //需要条件查询可以添加where
字段名:值
})
.get()
.then(res=>{
//成功之后的处理
})
.catch(err=>{
//失败后的处理
})
//增加操作
wx.cloud.database().collection("表名")
.add({
data:{
字段名:值 //这里来设置数据各字段的值
}
})
.then(res=>{
//成功之后的处理
})
.catch(err=>{
//失败后的处理
})
//更新操作
wx.cloud.database().collection("表名")
.doc("数据对应的_id") //查询单条记录时可以用_id绑定
.update({
data:{
字段名:值 //这里来设置需要更新的字段的值
}
})
.then(res=>{
//成功之后的处理
})
.catch(err=>{
//失败后的处理
})
//删除操作
wx.cloud.database().collection("表名")
.doc("数据对应的_id") //删除单条记录时可以用_id绑定
.remove()
.then(res=>{
//成功之后的处理
})
.catch(err=>{
//失败后的处理
})
进行微信小程序云开发,你几乎不需要对传统的数据库操作语句进行了解,就可以轻松上手,对于编程小白和非计算机专业的学生比较友好,当然,如果学习了数据库知识,再对比云开发,肯定能加深对数据库的理解。
学习到了!
不错不错继续加油
写得很棒,加油
之前也有想过做这种类似的,今天学习到了,赞!
他集合读写权限会影响_openid字段的写入,可以
let {OPENID, APPID} = cloud.getWXContext()
拿到openid之后再换个字段名称写入咯。权限控制这一块,中间层没法做太多,openid只能做标识,不能做用户凭据,在设计的时候把公共的数据放在这个文档型数据库里面就好了。
在控制台添加的数据没有openid,就不能在小程序端处理吗?
👌🏻期待更新