laravel 框架结合关联查询 when()用法分析


Posted in PHP onNovember 22, 2019

本文实例讲述了laravel 框架结合关联查询 when()用法。分享给大家供大家参考,具体如下:

Laravel 5.6 里面的when用法:

$name = $request->get('name');               //活动标题
$start_time = $request->get('start_time');         //活动开始时间
$user_name = $request->get('user_name');          //发布者
$limit = (int) $request->get('limit', 15);
$offset = (int) $request->get('offset', 0);
$data=ActiveJieSuan::with(['user' => function ($query) {$query->select('id','name');},
  'active'=> function ($query) {$query->select('id','name','start');}])
  ->when($name, function ($query) use ($name) {
   return $query->whereHas('active', function ($query) use ($name) {
     return $query->where('name', 'like', '%'.$name.'%');
   });
  })
  ->when($user_name, function ($query) use ($user_name) {
   return $query->whereHas('user', function ($query) use ($user_name) {
     return $query->where('name', 'like', '%'.$user_name.'%');
   });
  })
  ->when($start_time, function ($query) use ($start_time) {
   return $query->whereHas('active', function ($query) use ($start_time) {
     return $query->where('start', '>=', $start_time);
   });
  })
  ->limit($limit)
  ->offset($offset)
  ->orderBy('id', 'desc')
  ->paginate()->toArray();

源代码路径: D:\phpStudy\WWW\faceke\vendor\laravel\framework\src\Illuminate\Database\Concerns\BuildsQueries.php

public function when($value, $callback, $default = null)
{ 
  if ($value) { return $callback($this, $value) ?: $this; 
  } elseif ($default) {
  return $default($this, $value) ?: $this; 
  } return $this; 
}

when会判断第一个参数的真与假,如果是真,则执行第一个callback,如果是假,
则执行默认的方法,我的那段代码就只设置了真的时候需要执行的代码,因为条件有三种,
不只有两种。这样的话可以使代码易读性更好,当然也可以拆分子句,
但是when这个用法相对更赞。

laravel 框架结合关联查询 when()用法分析

如上用法直接用关联表中的字段作为搜索条件就更赞了!!!

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php基础知识:控制结构
Dec 13 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
PHP学习之整理字符串
Apr 17 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
PHP SplObjectStorage使用实例
May 12 PHP
php实现模拟post请求用法实例
Jul 11 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
PHP实现微信提现功能(微信商城)
Nov 21 #PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 #PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 #PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 #PHP
使用PHP开发留言板功能
Nov 19 #PHP
关于Laravel参数验证的一些疑与惑
Nov 19 #PHP
php传值和传引用的区别点总结
Nov 19 #PHP
You might like
php之curl实现http与https请求的方法
2014/10/21 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
使用python模拟高斯分布例子
2019/12/09 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
python对文件的操作方法汇总
2020/02/28 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
Ajax和javascript的区别
2013/07/20 面试题
课程设计心得体会
2013/12/28 职场文书
表彰先进的通报
2014/01/31 职场文书
学习自我鉴定
2014/02/01 职场文书
高中军训感想300字
2014/03/04 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python