beego orm 多个字段过滤的问题

tangs · 2016-07-31 15:47:08 · 5898 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-07-31 15:47:08 的主题,其中的信息可能已经有所发展或是发生改变。

原因是这样子的: 现在有两个字段,年份(year),和学期(term) beego的orm现在支持单独一个字段的过滤,例如2013年~2015年:

    tmp := map[string]interface{}
    o := orm.NewOrm()
    qs := o.QueryTable("table").Filter("year__gte", 2013).Filter("year__lte", 2015).All(&tmp)

如上可以得到年份的区间。 可是我的需求是多个字段过滤,例如2013年2学期~2015年1学期 用sql语句可以表示为:

    var sql string = "select * from table where year >= 2013 and year <= 2015 and not (year = 2013 and term = 1) and not (year = 2015 and term = 2);"

但是beego所提供的Exclude(expre, ...) 和*orm.Condition 都没有看到符合要求的办法,又不想直接用sql语句。求大神解答。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5898 次点击  
加入收藏 微博
3 回复  |  直到 2016-08-01 16:19:47
JY115
JY115 · #1 · 9年之前
tangs
tangs · #2 · 9年之前
JY115JY115 #1 回复

可以用文档中http://beego.me/docs/mvc/model/query.md的SetCond

这个有看的,就是上面的*orm.Conditon,看了很久,不知道 not (year = 2013 and term = 1 ) 这句话怎么写。cond.AndNot(exper,...)里面只是一个参数。

tangs
tangs · #3 · 9年之前

已经解决了,今天下午被队友嘲讽了一下午。瞎逼了, !( expre1 and expre2) == !expre1 or !expre2, 然后就将两个条件转换为或运算,就可以用SetCond来完成了。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传