Laravel框架执行原生SQL语句及使用paginate分页的方法。具体如下:
1、运行原生sql
public function getList($data){ //获取前端传过来的参数 $user = $data['userId']; $office = $data['officeId']; $key = $data['oneKeySearch']; //进行模糊搜索和联合查询 $where = 'and 1=1 '; if($key!=null) { $where.= ' and ( a.code like "%' . $key . '%"'; $where.= ' or b.name like "%' . $key . '%"'; $where.= ' or c.name like "%' . $key . '%")'; } //对前端传回的字段进行判断,如果不为空则执行条件查询 if($user!=null){ $user='and a.userId='.$user; } if($office!=null){ $office='and a.officeId='.$office; } //自定义原生sql语句,%s可以传参数到sql语句中,格式如下: $sqlTmp=sprintf('select a.id,a.code,a.attendanceRate,a.statisticTime, b.`realName` as userName,c.`name` as officeName from xxxa1 LEFT JOIN xxx2 b ON a.userId=b.id LEFT JOIN xxx3 c ON a.officeId=c.id where a.deleted_at is null and 1=1 %s %s %s ORDER BY a.code ', $where,$office,$user); //执行SQL语句 $results = DB::select($sqlTmp); //返回结果 return $results; }
2、运行查询构建器
public function getList($data){
//获取前端传过来的参数
$user = $data['userId'];
$office = $data['officeId'];
$key = $data['oneKeySearch'];
/*
* 1、表格使用别名:直接是 “表名 as table1" ,(下面是xxx1 as a)
* 2、左连接:DB::table('表1')
* ->leftJoin('表2', '表1.id', '=', '表2.外键关联')
* 3、因为使用了软删除,所以在查询的时候要加上 ->whereNull('a.deleted_at')
* 4、使用 DB::raw方法创建一个原生表达式,写进要查询的字段名称
* ->select(DB::raw('a.id,a.code,b.`realName` as userName,c.`name` as officeName'))
*5、使用orderBy进行排序
*
*/
$data=DB::table('biz_attendance_sta as a')
->leftJoin('sys_user as b', 'b.id', '=', 'a.userId')
->leftJoin('sys_office as c', 'c.id', '=', 'a.officeId')
->select(DB::raw('a.id,a.code,a.attendanceRate,a.statisticTime,
b.`realName` as userName,c.`name` as officeName'))
->whereNull('a.deleted_at')
->orderBy('a.code', 'desc');
//使用 if(!empty(xxx)){},来判断前端传过来的参数是否为空,不为空则执行条件查询
if(!empty($user)){
$data = $data->where( 'a.userId',$user);
}
if(!empty($office)){
$data = $data->where( 'a.officeId',$office);
}
//使用 if(!empty(xxx)){},来判断前端传过来的参数是否为空,不为空则执行模糊搜索和联合查询
if (!empty($key)) {
$data = $data->where(function ($query) use ($key) {
$query->where('a.code', 'like', "%{$key}%")
->orWhere('b.name', 'like', "%{$key}%")
->orWhere('c.name', 'like', "%{$key}%");
});
}
//使用->paginate(10)进行分页
$results=$data ->paginate(10);
return $results;
}
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END
















请登录后发表评论
注册
社交帐号登录