【黄啊码】thinkphp sql wherein的排序问题|tp不能按whereIn排序?

举报
黄啊码 发表于 2022/06/28 23:42:59 2022/06/28
【摘要】 很多时候我们使用wherein的时候是想按wherein里边的数组进行排序,但数据库查询的时候就会默认按照主键id进行升降序排序,在这里我们用以下方法: tp5.1之前是这么走: $ids = implode(',',[1,2.3.4.5]);        $exp = new Expres...

很多时候我们使用wherein的时候是想按wherein里边的数组进行排序,但数据库查询的时候就会默认按照主键id进行升降序排序,在这里我们用以下方法:

tp5.1之前是这么走:


  
  1. $ids = implode(',',[1,2.3.4.5]);
  2.         $exp = new Expression('field(id,'.$ids.')');
  3.         $datas = Db::name('think_user')
  4.             ->whereIn('id',$ids)
  5.             ->field('id,status')
  6.             ->order($exp)
  7.             ->select();
  8. dump($datas);

然而tp5.1.7之后的版本就会出现排序表达式错误:field(`id`...

解决方法:

在V5.1.7+版本开始,如果你需要在order方法中使用mysql函数的话,必须使用下面的方式:

1

2

3

4

5

Db::table('think_user')

->where('status', 1)

->orderRaw("field(id,'1','2','3')")

->limit(5)

->select();

哎,只能说都是坑!!!! 

文章来源: markwcm.blog.csdn.net,作者:黄啊码,版权归原作者所有,如需转载,请联系作者。

原文链接:markwcm.blog.csdn.net/article/details/121075949

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。