Laravel find in set排序实例


Posted in PHP onOctober 09, 2019

做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列。

例如,用户状态有四种:

=>未激活;1=>正常;2=>禁用;3=>软删除

现在的需求是,我要按照:正常->未激活->禁用->删除;这个顺序来进行排序,同时按照注册时间降序,网上查了很多资料,国内提到这个的很少,在stackOverFlow上找到了答案!

先上解决方案:

public function index($customer_type = null) {
  $search = request('search');
  $perPage = request('perPage') ? request('perPage') : 10;
  $customer_type = $customer_type ? $customer_type : request('customer_type');
  // \DB::enableQueryLog();
  $data = Customer::select(['id', 'email', 'user_name', 'nick_name', 'status', 'phone', 'create_time'])
    ->where('customer_type', '=', $customer_type)
    ->where(function ($query) use ($search) {
      if ($search) {
        $query->where('user_name', 'like binary', '%' . $search . '%')
          ->orWhere('nick_name', 'like binary', '%' . $search . '%')
          ->orWhere('phone', 'like binary', '%' . $search . '%')
          ->orWhere('email', 'like binary', '%' . $search . '%');
      }
    })
    ->orderByRaw("FIELD(status, " . implode(", ", [1, 2, 0, 3, 4]) . ")")
    ->orderBy('create_time', 'desc')
    ->paginate($perPage);
  // $query = \DB::getQueryLog();
  // dd($data);
  //追加额外参数,例如搜索条件
  $appendData = $data->appends(array(
    'search' => $search,
    'perPage' => $perPage,
  ));
  return view('admin/customer/customerList', compact('data'));
}

打印出来的sql语句如下:

array:2 [?
 => array:3 [?
“query” => “select count(*) as aggregate from customer where customer_type = ?”
“bindings” => array:1 [?
 => “1”
]
“time” => 2.08
]
 => array:3 [?
“query” => “select id, email, user_name, nick_name, status, phone, create_time from customer where customer_type = ? order by FIELD(status, 1, 2, 0, 3, 4), create_time desc limit 10 offset 0”
“bindings” => array:1 [?
 => “1”
]
“time” => 1.2
]
]

参考了以下链接:

https://stackoverflow.com/questions/42068986/laravel-weird-behavior-orderbyrawfield

https://stackoverflow.com/questions/34244455/how-to-use-not-find-in-set-in-laravel-5-1

https://stackoverflow.com/questions/35594450/find-in-set-in-laravel-example/35594503

find_in_set 复杂应用:

public function get_teacher_list($timeType, $name, $perPage = 10, $personality = 0, $teachingStyle = 0, $ageType = 0)
{
  // \DB::enableQueryLog();
  $result_data = DB::table('teacher_info as ti')
    ->select('ti.*')
    ->join('customer', 'customer.id', '=', 'ti.customer_id')
    ->where(function ($query) use ($personality) {
      if (trim($personality)) {
        $query->whereRaw("find_in_set($personality,ti.label_ids)");
      }
    })
    ->where(function ($query) use ($teachingStyle) {
      if (trim($teachingStyle)) {
        $query->whereRaw("find_in_set($teachingStyle,ti.label_ids)");
      }
    })
    ->where(function ($query) use ($ageType) {
      if (trim($ageType)) {
        $ageType = explode('-', $ageType);
        $query->whereRaw("DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 between $ageType[0] and $ageType[1]");
      }
    })
    ->where(function ($query) use ($timeType) {
      //1本周,2下周
      if ($timeType == 1) {
        $query->where('ti.can_appointment_1', 1);
      } elseif ($timeType == 2) {
        $query->where('ti.can_appointment_2', 1);
      } else {
        $query->where('ti.can_appointment_1', '>', 0)
          ->orWhere('ti.can_appointment_2', '>', 0);
      }
    })
    ->where(function ($query) use ($name) {
      if (trim($name)) {
        $query->where('ti.chinese_name', 'like', '%' . $name . '%')
          ->orWhere('ti.english_name', 'like', '%' . $name . '%');
      }
    })
    ->where('ti.status', 1)
    ->orderBy('ti.total_teach_num', 'desc')
    ->orderBy('ti.total_star_num', 'desc')
    ->orderBy('ti.satisfaction', 'desc')
    ->orderBy('ti.comment_num', 'desc')
    ->orderBy('ti.english_name', 'asc')
    ->paginate($perPage);
  // dd($result_data, \DB::getQueryLog());

  return $result_data;
}

专门拿出来看一下:

$ids = array(1,17,2);

$ids_ordered = implode(',', $ids);

$items = User::whereIn('id', $ids)
 ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
 ->get();

以上这篇Laravel find in set排序实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
我的论坛源代码(五)
Oct 09 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
php动态绑定变量的用法
Jun 16 PHP
php多重接口的实现方法
Jun 20 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
对laravel in 查询的使用方法详解
Oct 09 #PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 #PHP
Laravel使用原生sql语句并调用的方法
Oct 09 #PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 #PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 #PHP
解决Laravel 不能创建 migration 的问题
Oct 09 #PHP
Laravel创建数据库表结构的例子
Oct 09 #PHP
You might like
smarty表格换行实例
2014/12/15 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
JavaScript实现图片拖曳效果
2017/09/08 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
python自动安装pip
2014/04/24 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
python实现趣味图片字符化
2019/04/30 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
连锁经营管理专业大学生求职信
2013/10/30 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
美容院经理岗位职责
2014/04/03 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
银行转正自我鉴定
2014/09/29 职场文书
贷款收入证明格式
2015/06/24 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
python基础之while循环语句的使用
2021/04/20 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
pandas中关于apply+lambda的应用
2022/02/28 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python