laravel时间日期字段比较(Laravel find in set排序实例)
类别:编程学习 浏览量:1450
时间:2021-10-10 00:58:12 laravel时间日期字段比较
Laravel find in set排序实例做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列。
例如,用户状态有四种:
=>未激活;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排序实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/zhezhebie/article/details/78357354
您可能感兴趣
- laravel后台框架(laravel-admin的多级联动方法)
- laravel怎么设置返回指定列(在laravel5.2中实现点击用户头像更改头像的方法)
- laravel操作技巧(Laravel+Intervention实现上传图片功能示例)
- laravel命令行与可选项(Laravel6.0.4中将添加计划任务事件的方法步骤)
- laravel异步日志(laravel异步监控定时调度器实例详解)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- laravel入门教程零基础(Laravel5.7框架安装与使用学习笔记图文详解)
- laravel怎么返回指定列(laravel-admin解决表单select联动时,编辑默认没选上的问题)
- 简单laravel框架教程交流(使用composer 安装 laravel框架的方法图文详解)
- laravel获取数据(laravel框架添加数据,显示数据,返回成功值的方法)
- laravel怎么获取单个框架(laravel-admin自动生成模块,及相关基础配置方法)
- laravel框架入门项目(在laravel框架中使用model层的方法)
- laravel 数据库迁移(Laravel数据库读写分离配置的方法)
- laravel使用队列(基于laravel where的高级使用方法)
- laravelblade界面(laravel5.1框架基础之Blade模板继承简单使用方法分析)
- laravel数据库切换(实现laravel 插入操作日志到数据库的方法)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
热门推荐
- python多线程并发使用场景(对python多线程SSH登录并发脚本详解)
- docker时区问题和迁移数据问题(docker时区问题和迁移数据问题)
- 数据库常见的索引结构(数据库索引知识点整理)
- django参数配置(详解重置Django migration的常见方式)
- python批量转换图片格式(利用Python对文件夹下图片数据进行批量改名的代码实例)
- 微信小程序获取时间(微信小程序wxs日期时间处理的实现示例)
- 什么是mongodb 固定集合
- 实战部署nginxdocker(基于Docker、Nginx和Jenkins实现前端自动化部署)
- jquery中wrap、wrapAll、wrapInner
- mysqlbinlog怎么分析(MySQL中使用binlog时格式该如何选择)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9